Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp666552yba; Fri, 5 Apr 2019 14:39:31 -0700 (PDT) X-Google-Smtp-Source: APXvYqzpDbpx2x4sTu/3WVo2iAQuzgsjyIrlwAdgpXA8vxbvAZPTA8fCDc4biNH4QJxj7JAEqte7 X-Received: by 2002:a17:902:403:: with SMTP id 3mr15126256ple.48.1554500371667; Fri, 05 Apr 2019 14:39:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554500371; cv=none; d=google.com; s=arc-20160816; b=R+e+AXi6YfIlnXg62xxcuYnNF50GIhk5ID1HdRGIIgpXD1iksO7Eu1Lu3H2OT8XOsu MLDyn9mbO+7TYfHpHhQ/rWpsTHRKeGfnIY9CQs6ha/+E8rs8040mQ/Ikc44Usq/cywV2 RkeprI68+6qvC/YNPTACMHIsM7owqdLRxaa9MjqpNx7jysXxzV6KsizVp4hYE3Wn6zRz WbCSB3pHHdbr5uc8AXZZSHjLbeNFHDVexFClzE3Fpm2soITyxZGJLi7Y6jHDLWuIc/kS eQ2QXoRzy/f6Rl8qduy5V0P7dCW/yN1Z6sjqZverwgq6NXKqsoYVxAZagV/ouSudZwHy 5niA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:reply-to :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from; bh=DtffDyoyKSP+EQ3AqModlN1kedprGJP5h+qpUPJgBmA=; b=jZ3A2ywgJ/lzWc+c2fz+k35yiKexjm/ZZ7cKvWEURU04+L5F4i4+ITc5XEmQ52tquA acQykFbZ877pp9y8oG1q34fjN97xmcfipDwA9ySaK7BqBnEQwOHR1uVOivUcDCpSWSbZ vZv3Ujm+SxUVuv5fq1yrXtS4Q8n78DPKjJVGvN/ItgtfUc0nivD7kAdN07K315T0MrJV B5t5QxI29iMbIMAP3sH+U8uWZGCbVTHnJtNVx38rL0fAh8sbIUfDfdTdtb0/lYNxudGu y/34+MsAJK3Vg6jYJ0d3+lRCP40lW0J4pHRUXLdrXCQ/FzpJ/ffK5wDw2Rt0fV4mbgJ1 t8JA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l91si19986219plb.336.2019.04.05.14.39.16; Fri, 05 Apr 2019 14:39:31 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726605AbfDEViH (ORCPT + 99 others); Fri, 5 Apr 2019 17:38:07 -0400 Received: from a2nlsmtp01-02.prod.iad2.secureserver.net ([198.71.225.36]:48492 "EHLO a2nlsmtp01-02.prod.iad2.secureserver.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725973AbfDEViG (ORCPT ); Fri, 5 Apr 2019 17:38:06 -0400 Received: from linuxonhyperv2.linuxonhyperv.com ([107.180.71.197]) by : HOSTING RELAY : with ESMTP id CWWGhHHISO5E5CWWGhjAg9; Fri, 05 Apr 2019 14:37:04 -0700 x-originating-ip: 107.180.71.197 Received: from longli by linuxonhyperv2.linuxonhyperv.com with local (Exim 4.91) (envelope-from ) id 1hCWWG-0006N7-2b; Fri, 05 Apr 2019 14:37:04 -0700 From: Long Li To: Steve French , linux-cifs@vger.kernel.org, samba-technical@lists.samba.org, linux-kernel@vger.kernel.org Cc: Long Li Subject: [Patch (resend) 5/5] cifs: Call MID callback before destroying transport Date: Fri, 5 Apr 2019 21:36:35 +0000 Message-Id: <20190405213635.24383-5-longli@linuxonhyperv.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190405213635.24383-1-longli@linuxonhyperv.com> References: <20190405213635.24383-1-longli@linuxonhyperv.com> MIME-Version: 1.0 Reply-To: longli@microsoft.com Content-Transfer-Encoding: 8bit X-CMAE-Envelope: MS4wfJ+n9swuzbs35gEa4jn/gP2/eIJpmINAyK9pJQ4qmXMBzDgDMYz5a5zmlw5U0juLXvcyw2bzNGxKpxy4LTQmqUshorBycMXjfxKrOcWdI1yMjDTRvqj5 0Dt4JBPAOVB3brwjAWC/JLgx80CqJVk346zGaYPZG/Qp0kblGGwwK9VT4oNy7EcdmaXDi3ihn04RGBbuF5i3GeglidjlIQEODpdquV4xcknofIa0A3WV6qcM JwS8TOCQUmlFsvCddwiftyRpRK/t9XEq4e79hSqedyXO7/iNMJbn3CWUIOTbCKDNFjJABgxighHNT0RwgTgvyDZeVbAuRsKFpq7/fPPzpv5kTPdyNXCVl+qG 1Ux5h40k5DP4mQkWxEJRTIOBWqg8QQ== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Long Li When transport is being destroyed, it's possible that some processes may hold memory registrations that need to be deregistred. Call them first so nobody is using transport resources, and it can be destroyed. Signed-off-by: Long Li --- fs/cifs/connect.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 33e4d98..084756cf 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -528,22 +528,6 @@ cifs_reconnect(struct TCP_Server_Info *server) /* do not want to be sending data on a socket we are freeing */ cifs_dbg(FYI, "%s: tearing down socket\n", __func__); mutex_lock(&server->srv_mutex); - if (server->ssocket) { - cifs_dbg(FYI, "State: 0x%x Flags: 0x%lx\n", - server->ssocket->state, server->ssocket->flags); - kernel_sock_shutdown(server->ssocket, SHUT_WR); - cifs_dbg(FYI, "Post shutdown state: 0x%x Flags: 0x%lx\n", - server->ssocket->state, server->ssocket->flags); - sock_release(server->ssocket); - server->ssocket = NULL; - } else if (cifs_rdma_enabled(server)) - smbd_destroy(server); - server->sequence_number = 0; - server->session_estab = false; - kfree(server->session_key.response); - server->session_key.response = NULL; - server->session_key.len = 0; - server->lstrp = jiffies; /* mark submitted MIDs for retry and issue callback */ INIT_LIST_HEAD(&retry_list); @@ -556,7 +540,6 @@ cifs_reconnect(struct TCP_Server_Info *server) list_move(&mid_entry->qhead, &retry_list); } spin_unlock(&GlobalMid_Lock); - mutex_unlock(&server->srv_mutex); cifs_dbg(FYI, "%s: issuing mid callbacks\n", __func__); list_for_each_safe(tmp, tmp2, &retry_list) { @@ -565,6 +548,25 @@ cifs_reconnect(struct TCP_Server_Info *server) mid_entry->callback(mid_entry); } + if (server->ssocket) { + cifs_dbg(FYI, "State: 0x%x Flags: 0x%lx\n", + server->ssocket->state, server->ssocket->flags); + kernel_sock_shutdown(server->ssocket, SHUT_WR); + cifs_dbg(FYI, "Post shutdown state: 0x%x Flags: 0x%lx\n", + server->ssocket->state, server->ssocket->flags); + sock_release(server->ssocket); + server->ssocket = NULL; + } else if (cifs_rdma_enabled(server)) + smbd_destroy(server); + server->sequence_number = 0; + server->session_estab = false; + kfree(server->session_key.response); + server->session_key.response = NULL; + server->session_key.len = 0; + server->lstrp = jiffies; + + mutex_unlock(&server->srv_mutex); + do { try_to_freeze(); -- 2.7.4