aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/cluster/tcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ocfs2/cluster/tcp.c')
-rw-r--r--fs/ocfs2/cluster/tcp.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c
index ae4ff4a6636b..7700418d25ec 100644
--- a/fs/ocfs2/cluster/tcp.c
+++ b/fs/ocfs2/cluster/tcp.c
@@ -688,6 +688,7 @@ static void o2net_handler_put(struct o2net_msg_handler *nmh)
688 * be given to the handler if their payload is longer than the max. */ 688 * be given to the handler if their payload is longer than the max. */
689int o2net_register_handler(u32 msg_type, u32 key, u32 max_len, 689int o2net_register_handler(u32 msg_type, u32 key, u32 max_len,
690 o2net_msg_handler_func *func, void *data, 690 o2net_msg_handler_func *func, void *data,
691 o2net_post_msg_handler_func *post_func,
691 struct list_head *unreg_list) 692 struct list_head *unreg_list)
692{ 693{
693 struct o2net_msg_handler *nmh = NULL; 694 struct o2net_msg_handler *nmh = NULL;
@@ -722,6 +723,7 @@ int o2net_register_handler(u32 msg_type, u32 key, u32 max_len,
722 723
723 nmh->nh_func = func; 724 nmh->nh_func = func;
724 nmh->nh_func_data = data; 725 nmh->nh_func_data = data;
726 nmh->nh_post_func = post_func;
725 nmh->nh_msg_type = msg_type; 727 nmh->nh_msg_type = msg_type;
726 nmh->nh_max_len = max_len; 728 nmh->nh_max_len = max_len;
727 nmh->nh_key = key; 729 nmh->nh_key = key;
@@ -1049,6 +1051,7 @@ static int o2net_process_message(struct o2net_sock_container *sc,
1049 int ret = 0, handler_status; 1051 int ret = 0, handler_status;
1050 enum o2net_system_error syserr; 1052 enum o2net_system_error syserr;
1051 struct o2net_msg_handler *nmh = NULL; 1053 struct o2net_msg_handler *nmh = NULL;
1054 void *ret_data = NULL;
1052 1055
1053 msglog(hdr, "processing message\n"); 1056 msglog(hdr, "processing message\n");
1054 1057
@@ -1101,7 +1104,7 @@ static int o2net_process_message(struct o2net_sock_container *sc,
1101 sc->sc_msg_type = be16_to_cpu(hdr->msg_type); 1104 sc->sc_msg_type = be16_to_cpu(hdr->msg_type);
1102 handler_status = (nmh->nh_func)(hdr, sizeof(struct o2net_msg) + 1105 handler_status = (nmh->nh_func)(hdr, sizeof(struct o2net_msg) +
1103 be16_to_cpu(hdr->data_len), 1106 be16_to_cpu(hdr->data_len),
1104 nmh->nh_func_data); 1107 nmh->nh_func_data, &ret_data);
1105 do_gettimeofday(&sc->sc_tv_func_stop); 1108 do_gettimeofday(&sc->sc_tv_func_stop);
1106 1109
1107out_respond: 1110out_respond:
@@ -1112,6 +1115,13 @@ out_respond:
1112 mlog(0, "sending handler status %d, syserr %d returned %d\n", 1115 mlog(0, "sending handler status %d, syserr %d returned %d\n",
1113 handler_status, syserr, ret); 1116 handler_status, syserr, ret);
1114 1117
1118 if (nmh) {
1119 BUG_ON(ret_data != NULL && nmh->nh_post_func == NULL);
1120 if (nmh->nh_post_func)
1121 (nmh->nh_post_func)(handler_status, nmh->nh_func_data,
1122 ret_data);
1123 }
1124
1115out: 1125out:
1116 if (nmh) 1126 if (nmh)
1117 o2net_handler_put(nmh); 1127 o2net_handler_put(nmh);