Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1715996
| 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 |
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
[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