From ca8c385749e2092ab92a0c79d58638ce30acfd18 Mon Sep 17 00:00:00 2001 From: adilger Date: Wed, 3 Nov 2004 00:40:32 +0000 Subject: [PATCH] Branch: b1_4 Don't complete EKC RPC on peer death. Fixes oops hit during CMD testing. b=4012 --- lustre/ChangeLog | 1 + lustre/portals/knals/qswnal/qswnal_cb.c | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 95e485a..84686a6 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -4,6 +4,7 @@ tbd Cluster File Systems, Inc. - flock/lockf fixes - don't use EXT3 constants in llite code (5094) - return async write errors to application if possible (2248) + - don't complete EKC RPC on peer death (4012) * miscellania - reorganization of lov code - single portals codebase diff --git a/lustre/portals/knals/qswnal/qswnal_cb.c b/lustre/portals/knals/qswnal/qswnal_cb.c index 97b5a26..ef9fd55 100644 --- a/lustre/portals/knals/qswnal/qswnal_cb.c +++ b/lustre/portals/knals/qswnal/qswnal_cb.c @@ -995,6 +995,8 @@ kqswnal_rdma (kqswnal_rx_t *krx, lib_msg_t *libmsg, int type, #endif if (eprc != EP_SUCCESS) { CERROR("ep_rpc_get failed: %d\n", eprc); + /* don't attempt RPC completion */ + krx->krx_rpc_reply_needed = 0; rc = -ECONNABORTED; } break; @@ -1582,11 +1584,12 @@ kqswnal_rxhandler(EP_RXD *rxd) krx->krx_state = KRX_PARSE; krx->krx_rxd = rxd; krx->krx_nob = nob; -#if MULTIRAIL_EKC - krx->krx_rpc_reply_needed = (status != EP_SHUTDOWN) && ep_rxd_isrpc(rxd); -#else - krx->krx_rpc_reply_needed = ep_rxd_isrpc(rxd); -#endif + + /* RPC reply iff rpc request received without error */ + krx->krx_rpc_reply_needed = ep_rxd_isrpc(rxd) && + !(status == EP_SUCCESS || + status == EP_MSG_TOO_BIG); + /* Default to failure if an RPC reply is requested but not handled */ krx->krx_rpc_reply_status = -EPROTO; atomic_set (&krx->krx_refcount, 1); -- 1.8.3.1