Whamcloud - gitweb
LU-12218 ptlrpc: Bulk assertion fails on -ENOMEM 53/34753/2
authorAndriy Skulysh <c17819@cray.com>
Wed, 10 Apr 2019 20:42:06 +0000 (23:42 +0300)
committerOleg Drokin <green@whamcloud.com>
Sat, 4 May 2019 05:57:15 +0000 (05:57 +0000)
Recalculate rq_mbits on ENOMEM resend if OBD_CONNECT_BULK_MBITS
isn't used.

Change-Id: I3bd5f7536372558a264bf5fe3247b8b1946f84fd
Cray-bug-id: LUS-7159
Signed-off-by: Andriy Skulysh <c17819@cray.com>
Reviewed-by: Alexander Boyko <c17825@cray.com>
Reviewed-by: Andrew Perepechko <c17827@cray.com>
Reviewed-on: https://review.whamcloud.com/34753
Tested-by: Jenkins
Reviewed-by: Alexandr Boyko <c17825@cray.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/ptlrpc/client.c

index 064c468..8ba71f6 100644 (file)
@@ -3318,7 +3318,14 @@ void ptlrpc_set_bulk_mbits(struct ptlrpc_request *req)
                       old_mbits, req->rq_mbits);
        } else if (!(lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY)) {
                /* Request being sent first time, use xid as matchbits. */
-               req->rq_mbits = req->rq_xid;
+               if (OCD_HAS_FLAG(&bd->bd_import->imp_connect_data, BULK_MBITS)
+                   || req->rq_mbits == 0) {
+                       req->rq_mbits = req->rq_xid;
+               } else {
+                       int total_md = (bd->bd_iov_count + LNET_MAX_IOV - 1) /
+                                       LNET_MAX_IOV;
+                       req->rq_mbits -= total_md - 1;
+               }
        } else {
                /* Replay request, xid and matchbits have already been
                 * correctly assigned. */