diff options
Diffstat (limited to 'fs/ocfs2/cluster/tcp.c')
-rw-r--r-- | fs/ocfs2/cluster/tcp.c | 12 |
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. */ |
689 | int o2net_register_handler(u32 msg_type, u32 key, u32 max_len, | 689 | int 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 | ||
1107 | out_respond: | 1110 | out_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 | |||
1115 | out: | 1125 | out: |
1116 | if (nmh) | 1126 | if (nmh) |
1117 | o2net_handler_put(nmh); | 1127 | o2net_handler_put(nmh); |