Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1715996

[Patch v2 14/19] CIFS: SMBD: Deregister memory when finishing SMB write

From Long Li <longli@exchange.microsoft.com>
Newsgroups linux.kernel
Subject [Patch v2 14/19] CIFS: SMBD: Deregister memory when finishing SMB write
Date 2017-08-20 21:10 +0200
Message-ID <ugDLH-2xW-19@gated-at.bofh.it> (permalink)
References <ugDLH-2xW-3@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Long Li <longli@microsoft.com>

On write I/O finish, deregister the memory region if this was for a RDMA read. The call to smbd_deregister_mr will do local invalidation and possibly wait, if remote invalidate is not used.

Signed-off-by: Long Li <longli@microsoft.com>
---
 fs/cifs/smb2pdu.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
index 5581afd..5551053 100644
--- a/fs/cifs/smb2pdu.c
+++ b/fs/cifs/smb2pdu.c
@@ -2666,6 +2666,18 @@ smb2_writev_callback(struct mid_q_entry *mid)
 		break;
 	}
 
+	/*
+	 * If this wdata has a memory registered, the MR can be freed
+	 * The number of MRs available is limited, it's important to recover
+	 * used MR as soon as I/O is finished. Hold MR longer in the later
+	 * I/O process can possibly result in I/O deadlock due to lack of MR
+	 * to send request on I/O retry
+	 */
+	if (wdata->mr) {
+		smbd_deregister_mr(wdata->mr);
+		wdata->mr = NULL;
+	}
+
 	if (wdata->result)
 		cifs_stats_fail_inc(tcon, SMB2_WRITE_HE);
 
-- 
2.7.4

Back to linux.kernel | Previous | Next | Find similar | Unroll thread


Thread

[Patch v2 14/19] CIFS: SMBD: Deregister memory when finishing SMB write Long Li <longli@exchange.microsoft.com> - 2017-08-20 21:10 +0200

csiph-web