]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
smb: client: call smbd_destroy() in the same splace as kernel_sock_shutdown()/sock_re...
authorStefan Metzmacher <metze@samba.org>
Tue, 28 Oct 2025 17:43:46 +0000 (18:43 +0100)
committerSteve French <stfrench@microsoft.com>
Thu, 30 Oct 2025 01:13:13 +0000 (20:13 -0500)
With commit b0432201a11b ("smb: client: let destroy_mr_list() keep
smbdirect_mr_io memory if registered") the changes from commit
214bab448476 ("cifs: Call MID callback before destroying transport") and
commit 1d2a4f57cebd ("cifs:smbd When reconnecting to server, call
smbd_destroy() after all MIDs have been called") are no longer needed.

And it's better to use the same logic flow, so that
the chance of smbdirect related problems is smaller.

Fixes: 214bab448476 ("cifs: Call MID callback before destroying transport")
Fixes: 1d2a4f57cebd ("cifs:smbd When reconnecting to server, call smbd_destroy() after all MIDs have been called")
Cc: Steve French <smfrench@gmail.com>
Cc: Tom Talpey <tom@talpey.com>
Cc: Long Li <longli@microsoft.com>
Cc: Namjae Jeon <linkinjeon@kernel.org>
Cc: linux-cifs@vger.kernel.org
Cc: samba-technical@lists.samba.org
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/connect.c

index d65ab7e4b1c269b3a2dc8c521555b6e30be2f4c9..55cb4b0cbd48f9a1498814f52b3b0beeac1b2191 100644 (file)
@@ -310,6 +310,8 @@ cifs_abort_connection(struct TCP_Server_Info *server)
                         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;
@@ -338,12 +340,6 @@ cifs_abort_connection(struct TCP_Server_Info *server)
                mid_execute_callback(mid);
                release_mid(mid);
        }
-
-       if (cifs_rdma_enabled(server)) {
-               cifs_server_lock(server);
-               smbd_destroy(server);
-               cifs_server_unlock(server);
-       }
 }
 
 static bool cifs_tcp_ses_needs_reconnect(struct TCP_Server_Info *server, int num_targets)