Lines Matching refs:nmh
738 static int o2net_handler_cmp(struct o2net_msg_handler *nmh, u32 msg_type, in o2net_handler_cmp() argument
741 int ret = memcmp(&nmh->nh_key, &key, sizeof(key)); in o2net_handler_cmp()
744 ret = memcmp(&nmh->nh_msg_type, &msg_type, sizeof(msg_type)); in o2net_handler_cmp()
755 struct o2net_msg_handler *nmh, *ret = NULL; in o2net_handler_tree_lookup() local
760 nmh = rb_entry(parent, struct o2net_msg_handler, nh_node); in o2net_handler_tree_lookup()
761 cmp = o2net_handler_cmp(nmh, msg_type, key); in o2net_handler_tree_lookup()
768 ret = nmh; in o2net_handler_tree_lookup()
783 struct o2net_msg_handler *nmh; in o2net_handler_kref_release() local
784 nmh = container_of(kref, struct o2net_msg_handler, nh_kref); in o2net_handler_kref_release()
786 kfree(nmh); in o2net_handler_kref_release()
789 static void o2net_handler_put(struct o2net_msg_handler *nmh) in o2net_handler_put() argument
791 kref_put(&nmh->nh_kref, o2net_handler_kref_release); in o2net_handler_put()
801 struct o2net_msg_handler *nmh = NULL; in o2net_register_handler() local
825 nmh = kzalloc(sizeof(struct o2net_msg_handler), GFP_NOFS); in o2net_register_handler()
826 if (nmh == NULL) { in o2net_register_handler()
831 nmh->nh_func = func; in o2net_register_handler()
832 nmh->nh_func_data = data; in o2net_register_handler()
833 nmh->nh_post_func = post_func; in o2net_register_handler()
834 nmh->nh_msg_type = msg_type; in o2net_register_handler()
835 nmh->nh_max_len = max_len; in o2net_register_handler()
836 nmh->nh_key = key; in o2net_register_handler()
839 kref_init(&nmh->nh_kref); in o2net_register_handler()
840 INIT_LIST_HEAD(&nmh->nh_unregister_item); in o2net_register_handler()
846 rb_link_node(&nmh->nh_node, parent, p); in o2net_register_handler()
847 rb_insert_color(&nmh->nh_node, &o2net_handler_tree); in o2net_register_handler()
848 list_add_tail(&nmh->nh_unregister_item, unreg_list); in o2net_register_handler()
862 kfree(nmh); in o2net_register_handler()
870 struct o2net_msg_handler *nmh, *n; in o2net_unregister_handler_list() local
873 list_for_each_entry_safe(nmh, n, list, nh_unregister_item) { in o2net_unregister_handler_list()
875 nmh->nh_func, nmh->nh_msg_type, nmh->nh_key); in o2net_unregister_handler_list()
876 rb_erase(&nmh->nh_node, &o2net_handler_tree); in o2net_unregister_handler_list()
877 list_del_init(&nmh->nh_unregister_item); in o2net_unregister_handler_list()
878 kref_put(&nmh->nh_kref, o2net_handler_kref_release); in o2net_unregister_handler_list()
886 struct o2net_msg_handler *nmh; in o2net_handler_get() local
889 nmh = o2net_handler_tree_lookup(msg_type, key, NULL, NULL); in o2net_handler_get()
890 if (nmh) in o2net_handler_get()
891 kref_get(&nmh->nh_kref); in o2net_handler_get()
894 return nmh; in o2net_handler_get()
1172 struct o2net_msg_handler *nmh = NULL; in o2net_process_message() local
1203 nmh = o2net_handler_get(be16_to_cpu(hdr->msg_type), in o2net_process_message()
1205 if (!nmh) { in o2net_process_message()
1214 if (be16_to_cpu(hdr->data_len) > nmh->nh_max_len) in o2net_process_message()
1223 handler_status = (nmh->nh_func)(hdr, sizeof(struct o2net_msg) + in o2net_process_message()
1225 nmh->nh_func_data, &ret_data); in o2net_process_message()
1240 if (nmh) { in o2net_process_message()
1241 BUG_ON(ret_data != NULL && nmh->nh_post_func == NULL); in o2net_process_message()
1242 if (nmh->nh_post_func) in o2net_process_message()
1243 (nmh->nh_post_func)(handler_status, nmh->nh_func_data, in o2net_process_message()
1248 if (nmh) in o2net_process_message()
1249 o2net_handler_put(nmh); in o2net_process_message()