]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cifs: reset connections for all channels when reconnect requested
authorShyam Prasad N <sprasad@microsoft.com>
Mon, 2 Jun 2025 17:07:13 +0000 (22:37 +0530)
committerSteve French <stfrench@microsoft.com>
Mon, 2 Jun 2025 18:34:18 +0000 (13:34 -0500)
cifs_reconnect can be called with a flag to mark the session as needing
reconnect too. When this is done, we expect the connections of all
channels to be reconnected too, which is not happening today.

Without doing this, we have seen bad things happen when primary and
secondary channels are connected to different servers (in case of cloud
services like Azure Files SMB).

This change would force all connections to reconnect as well, not just
the sessions and tcons.

Cc: <stable@vger.kernel.org>
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/connect.c

index 6bf04d9a5491387fed6fda02a832ee2bd3bb836c..ca1cb01c6ef89c18874ffffa7b5d94ea5e0887dc 100644 (file)
@@ -377,6 +377,13 @@ static int __cifs_reconnect(struct TCP_Server_Info *server,
        if (!cifs_tcp_ses_needs_reconnect(server, 1))
                return 0;
 
+       /*
+        * if smb session has been marked for reconnect, also reconnect all
+        * connections. This way, the other connections do not end up bad.
+        */
+       if (mark_smb_session)
+               cifs_signal_cifsd_for_reconnect(server, mark_smb_session);
+
        cifs_mark_tcp_ses_conns_for_reconnect(server, mark_smb_session);
 
        cifs_abort_connection(server);