Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753695AbdHTTGx (ORCPT ); Sun, 20 Aug 2017 15:06:53 -0400 Received: from a2nlsmtp01-03.prod.iad2.secureserver.net ([198.71.225.37]:44452 "EHLO a2nlsmtp01-03.prod.iad2.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753653AbdHTTGu (ORCPT ); Sun, 20 Aug 2017 15:06:50 -0400 x-originating-ip: 107.180.71.197 From: Long Li To: Steve French , linux-cifs@vger.kernel.org, samba-technical@lists.samba.org, linux-kernel@vger.kernel.org, linux-rdma@vger.kernel.org, Christoph Hellwig , Tom Talpey , Matthew Wilcox Cc: Long Li Subject: [Patch v2 14/19] CIFS: SMBD: Deregister memory when finishing SMB write Date: Sun, 20 Aug 2017 12:04:38 -0700 Message-Id: <1503255883-3041-15-git-send-email-longli@exchange.microsoft.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1503255883-3041-1-git-send-email-longli@exchange.microsoft.com> References: <1503255883-3041-1-git-send-email-longli@exchange.microsoft.com> X-CMAE-Envelope: MS4wfP9iAJorQLPBPLw3exxsowDs4p0XNDOq/jP69Yl8J3uut3vb4o7S4bh4dlhuDCA93HJ9rX/jnd0dNi6tj6vM1LTLVHcWeEahBfPmJPwja5INO9xvKELV 1G5B2hnLcQgWQCINaejGCQfdjGVAA5gbIqUadJRsIbxNHRKZJ6BloRxGPNsY+JjQQN4ua+NXBmFry3lESJ7Zu/kGuGG9WZqhSRPICx8ZUEN1P+e9Hwn0F2nd DzsKUeiAq6IhF8kT0HWdQJd6aKEknesFW6vVbybVt7u2f/OdRN89lpZ+uUHb1h7DCqC8UVybD4qI1WAxEQrGgm9SkIMLFZDvV/X78FzdBZQctAnpP2GSXaOr ScxTA/V9jk6OEyeeL+z2c7Sc9qufXeMYurANi8EvZq+1M3Brckf01Uf7hIRgE+06MPhBAIgMFItaAElnern8i/a6ReWO9JUIkyAMxk+b8UmAU1gBTe9d6dsq QsadRc9DfbebOsD2 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1043 Lines: 34 From: Long Li 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 --- 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