From a24c0c000e6d1f214a35e33a352bcf28ffce7c87 Mon Sep 17 00:00:00 2001 From: isaac Date: Wed, 27 Aug 2008 17:23:50 +0000 Subject: [PATCH] b=16889,i=liangzhen: - moved srpc_service_recycle_buffer out of srpc_lnet_ev_handler and into srpc_handle_rpc --- lnet/selftest/rpc.c | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/lnet/selftest/rpc.c b/lnet/selftest/rpc.c index 7fee578..8066bde 100644 --- a/lnet/selftest/rpc.c +++ b/lnet/selftest/rpc.c @@ -924,8 +924,11 @@ srpc_handle_rpc (swi_workitem_t *wi) msg = &rpc->srpc_reqstbuf->buf_msg; reply = &rpc->srpc_replymsg.msg_body.reply; - if (msg->msg_version != SRPC_MSG_VERSION && - msg->msg_version != __swab32(SRPC_MSG_VERSION)) { + if (msg->msg_magic == 0) { + /* moaned already in srpc_lnet_ev_handler */ + rc = EBADMSG; + } else if (msg->msg_version != SRPC_MSG_VERSION && + msg->msg_version != __swab32(SRPC_MSG_VERSION)) { CWARN ("Version mismatch: %u, %u expected, from %s\n", msg->msg_version, SRPC_MSG_VERSION, libcfs_id2str(rpc->srpc_peer)); @@ -1512,20 +1515,10 @@ srpc_lnet_ev_handler (lnet_event_t *ev) ev->status, ev->mlength, msg->msg_type, msg->msg_magic); - /* NB might drop sv_lock in srpc_service_recycle_buffer, - * sv_nposted_msg++ as an implicit reference to prevent - * sv from disappearing under me */ - sv->sv_nposted_msg++; - srpc_service_recycle_buffer(sv, buffer); - sv->sv_nposted_msg--; - spin_unlock(&sv->sv_lock); - - if (ev->status == 0) { /* status!=0 counted already */ - spin_lock(&srpc_data.rpc_glock); - srpc_data.rpc_counters.errors++; - spin_unlock(&srpc_data.rpc_glock); - } - break; + /* NB can't call srpc_service_recycle_buffer here since + * it may call LNetM[DE]Attach. The invalid magic tells + * srpc_handle_rpc to drop this RPC */ + msg->msg_magic = 0; } if (!list_empty(&sv->sv_free_rpcq)) { -- 1.8.3.1