Whamcloud - gitweb
LU-9828 ptlrpc: Do not assert when bd_nob_transferred != 0 91/28491/2
authorDoug Oucharek <doug.s.oucharek@intel.com>
Wed, 31 May 2017 21:39:12 +0000 (14:39 -0700)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 28 Aug 2017 06:25:47 +0000 (06:25 +0000)
There is a case in the routine ptlrpc_register_bulk() where we were
asserting if bd_nob_transferred != 0 when not resending.  There is
evidence that network errors can create a situation where
this does happen.  So we should not be asserting!

This patch changes that assert to an error return code of -EIO.

Signed-off-by: Doug Oucharek <doug.s.oucharek@intel.com>
Change-Id: I6a73ca1b04a86f187744d3b8b5d46df71d95e416
Reviewed-on: https://review.whamcloud.com/28491
Reviewed-by: Dmitry Eremin <dmitry.eremin@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Sonia Sharma <sonia.sharma@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/ptlrpc/niobuf.c

index 6cb29ef..9998690 100644 (file)
@@ -336,8 +336,11 @@ int ptlrpc_register_bulk(struct ptlrpc_request *req)
        /* cleanup the state of the bulk for it will be reused */
        if (req->rq_resend || req->rq_send_state == LUSTRE_IMP_REPLAY)
                desc->bd_nob_transferred = 0;
-       else
-               LASSERT(desc->bd_nob_transferred == 0);
+       else if (desc->bd_nob_transferred != 0)
+               /* If the network failed after an RPC was sent, this condition
+                * could happen.  Rather than assert (was here before), return
+                * an EIO error. */
+               RETURN(-EIO);
 
        desc->bd_failure = 0;