From e63a49fa69205cd6730206eaf3a7e39824586238 Mon Sep 17 00:00:00 2001 From: Andriy Skulysh Date: Wed, 10 Apr 2019 23:42:06 +0300 Subject: [PATCH 1/1] LU-12218 ptlrpc: Bulk assertion fails on -ENOMEM 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 Reviewed-by: Alexander Boyko Reviewed-by: Andrew Perepechko Reviewed-on: https://review.whamcloud.com/34753 Tested-by: Jenkins Reviewed-by: Alexandr Boyko Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/ptlrpc/client.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lustre/ptlrpc/client.c b/lustre/ptlrpc/client.c index 064c468..8ba71f6 100644 --- a/lustre/ptlrpc/client.c +++ b/lustre/ptlrpc/client.c @@ -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. */ -- 1.8.3.1