Whamcloud - gitweb
Branch: b1_4
authoradilger <adilger>
Wed, 3 Nov 2004 00:40:32 +0000 (00:40 +0000)
committeradilger <adilger>
Wed, 3 Nov 2004 00:40:32 +0000 (00:40 +0000)
Don't complete EKC RPC on peer death.  Fixes oops hit during CMD testing.
b=4012

lustre/ChangeLog
lustre/portals/knals/qswnal/qswnal_cb.c

index 95e485a..84686a6 100644 (file)
@@ -4,6 +4,7 @@ tbd         Cluster File Systems, Inc. <info@clusterfs.com>
        - 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
index 97b5a26..ef9fd55 100644 (file)
@@ -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);