cifs: cifs_pick_channel should try selecting active channels
authorShyam Prasad N <sprasad@microsoft.com>
Sun, 21 Jan 2024 03:32:43 +0000 (03:32 +0000)
committerSteve French <stfrench@microsoft.com>
Wed, 24 Jan 2024 01:03:46 +0000 (19:03 -0600)
cifs_pick_channel today just selects a channel based
on the policy of least loaded channel. However, it
does not take into account if the channel needs
reconnect. As a result, we can have failures in send
that can be completely avoided.

This change doesn't make a channel a candidate for
this selection if it needs reconnect.

Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/transport.c

index 4f717ad7c21b424d45f785fdbb94be941c1d7f14..8695c9961f5aa3a16895b5746db4427e933c0708 100644 (file)
@@ -1026,6 +1026,9 @@ struct TCP_Server_Info *cifs_pick_channel(struct cifs_ses *ses)
                if (!server || server->terminate)
                        continue;
 
+               if (CIFS_CHAN_NEEDS_RECONNECT(ses, i))
+                       continue;
+
                /*
                 * strictly speaking, we should pick up req_lock to read
                 * server->in_flight. But it shouldn't matter much here if we