Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp5915543yba; Mon, 13 May 2019 21:03:42 -0700 (PDT) X-Google-Smtp-Source: APXvYqzYwGs7EkwRnC9u7X83uK9C3CzlZMDSKYXYTXOo67lYa77EsaI0ibxWUj/k6CBWli/U/Gi4 X-Received: by 2002:a62:d286:: with SMTP id c128mr38977678pfg.159.1557806622590; Mon, 13 May 2019 21:03:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557806622; cv=none; d=google.com; s=arc-20160816; b=MWaYUd09G+ERfaiCOykmvoW8/l4ifL3DbfAjSTiCZHkGRV9sNawTFy/b4kPLiI5nfY YGOb0s+tDxAncKHFpTRCjfb9ETKeqU2Qri/68oGOzBfmWDz5CdPK1yQueVCoykCeG/mk ofmgpKvVFl5AfPQi0N45Q8lv7aLNm1hN0Dw/6EUo8wnshcWczKJxukWGao7C0cvcz7// i9pL3ZUdPqHkQdFdJRtpI60NJBKLSf8PCJT2aeB3lBYQJMdFcsKT+0qj6pWkti4aRslI 9mXQ+vBvsvT7qhE5WKErFD+S7TVmgVt+yyZcRpC5ceB1H3Z51DuU7IGnbtr/Vxmtzd7A +sAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:reply-to:message-id:date:subject:cc:to :from; bh=lXZfX/G/Rz9ir1bH/vK9I5sznOb2nKhfXbnkhKKErHU=; b=uo89cb7nKPNi04tJnXsHLfjLNBNgPe75Vz6zJNWaxjiA9iv8z/FYkUzoYtDpMM/m71 oZ2XrGSlt0W61Xzl/3dSS5U16bpYqV4JI19+vVmErhxduyu0IVPOv9zKyrs79xn/eZP8 jZ33Y3uGO7phIRdYO1SVr1Pvy3vxHwPab/gH194cxhk/qCwwgQh8Gnh39Mo9cXnaXyT+ NYwtPebR1I7hlVeM0OFE5oFcymsJM+xdRNqYLx51a4k2ITL3b7ySX9E9gqdaryQQLLqe ywNDaZD0plpcmmbC9YXmCMdBXC5vqb9ygUD+mH+01sooYHryrFgODrMVSYf4Ys2owIE2 TM5A== 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 192si19111594pgb.488.2019.05.13.21.03.15; Mon, 13 May 2019 21:03:42 -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 S1725935AbfENEBx (ORCPT + 99 others); Tue, 14 May 2019 00:01:53 -0400 Received: from linux.microsoft.com ([13.77.154.182]:37040 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725562AbfENEBw (ORCPT ); Tue, 14 May 2019 00:01:52 -0400 Received: by linux.microsoft.com (Postfix, from userid 1004) id D18612074A35; Mon, 13 May 2019 21:01:51 -0700 (PDT) From: longli@linuxonhyperv.com To: Steve French , linux-cifs@vger.kernel.org, samba-technical@lists.samba.org, linux-kernel@vger.kernel.org Cc: Long Li Subject: [PATCH 1/2] cifs:smbd When reconnecting to server, call smbd_destroy() after all MIDs have been called Date: Mon, 13 May 2019 21:01:28 -0700 Message-Id: <1557806489-11272-1-git-send-email-longli@linuxonhyperv.com> X-Mailer: git-send-email 1.8.3.1 Reply-To: longli@microsoft.com Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Long Li commit 214bab448476 ("cifs: Call MID callback before destroying transport") assumes that the MID callback should not take srv_mutex, this may not always be true. SMB Direct requires the MID callback completed before calling transport so all pending memory registration can be freed. So restore the orignal calling sequence so TCP transport will use the same code, but moving smbd_destroy() after all MID has been called. fixes: 214bab448476 ("cifs: Call MID callback before destroying transport") Signed-off-by: Long Li --- fs/cifs/connect.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 084756cfdaee..0b3ac8b76d18 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -528,6 +528,21 @@ 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; + } + 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); @@ -540,6 +555,7 @@ 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) { @@ -548,24 +564,11 @@ 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)) + if (cifs_rdma_enabled(server)) { + mutex_lock(&server->srv_mutex); 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); + mutex_unlock(&server->srv_mutex); + } do { try_to_freeze(); -- 2.17.1