Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753768AbdHTTHH (ORCPT ); Sun, 20 Aug 2017 15:07:07 -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 S1753744AbdHTTHE (ORCPT ); Sun, 20 Aug 2017 15:07:04 -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 18/19] CIFS: SMBD: Deregister memory when finishing SMB READ Date: Sun, 20 Aug 2017 12:04:42 -0700 Message-Id: <1503255883-3041-19-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: MS4wfKJAjK9NwecwLrtG2NbY/4C7JZI2hfGJhYl63EBQQJqIEirxoZi68dRZ5dLEhUQWJTFT93MskXLv++0f2XuXJbWvbyCcSSdvzXjNwLSNI2jG0KLW3lOT g93oWAVGAGBptVN2AValNfHX325NiBhVPfttcH2KsS9zWXU7wK6/7uxtJCDdbZ3fQk6DautMUVbswY2SUaxLZEd/RGDkTgLuYeB/frUCOnN+6L472kNdtoBk aMf43jRBn94h/R9oYrMJjjpdgGfFUQKz4sVPuiEJNPS9n+aKRDMLut+t3uIw2ylhYaoPjZWBjCWYgWICnaIq9N4pOT4MuFXgtaViVl6X7Z2De0sMmjlrWndN 3CQ0A+IMPG9coZRCTJKgFgAImMnbVBwB8ahFlGz9UpKIFnyOmHaICAOvpwW48Y8fG1iKh2bHyEXfS+G/BYxVO/OY7HAIzvYjsy2llOWa8PhjodfOWaEQ7qja 08218NGByBIfYedN Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 963 Lines: 32 From: Long Li When SMB READ is finished, deregister the memory regions if RDMA write is used for this SMB READ. smbd_deregister_mr may need to do local invalidation and sleep, if server remote invalidation is not used. Signed-off-by: Long Li --- fs/cifs/smb2pdu.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c index 1f08c75..43a7b60 100644 --- a/fs/cifs/smb2pdu.c +++ b/fs/cifs/smb2pdu.c @@ -2504,6 +2504,16 @@ smb2_readv_callback(struct mid_q_entry *mid) rdata->result = -EIO; } + /* + * If this rdata has a memmory registered, the MR can be freed + * MR needs to be freed as soon as I/O finishes to prevent deadlock + * because they have limited number and are used for future I/Os + */ + if (rdata->mr) { + smbd_deregister_mr(rdata->mr); + rdata->mr = NULL; + } + if (rdata->result) cifs_stats_fail_inc(tcon, SMB2_READ_HE); -- 2.7.4