summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShyam Prasad N <sprasad@microsoft.com>2024-02-01 12:15:29 +0100
committerSteve French <stfrench@microsoft.com>2024-02-01 19:13:05 +0100
commit6aac002bcfd554aff6d3ebb55e1660d078d70ab0 (patch)
tree199e452c9f0a3da0d3bf2787d8bf726cc75443e6
parentcifs: do not search for channel if server is terminating (diff)
downloadlinux-6aac002bcfd554aff6d3ebb55e1660d078d70ab0.tar.xz
linux-6aac002bcfd554aff6d3ebb55e1660d078d70ab0.zip
cifs: failure to add channel on iface should bump up weight
After the interface selection policy change to do a weighted round robin, each iface maintains a weight_fulfilled. When the weight_fulfilled reaches the total weight for the iface, we know that the weights can be reset and ifaces can be allocated from scratch again. During channel allocation failures on a particular channel, weight_fulfilled is not incremented. If a few interfaces are inactive, we could end up in a situation where the active interfaces are all allocated for the total_weight, and inactive ones are all that remain. This can cause a situation where no more channels can be allocated further. This change fixes it by increasing weight_fulfilled, even when channel allocation failure happens. This could mean that if there are temporary failures in channel allocation, the iface weights may not strictly be adhered to. But that's still okay. Fixes: a6d8fb54a515 ("cifs: distribute channels across interfaces based on speed") Signed-off-by: Shyam Prasad N <sprasad@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com>
-rw-r--r--fs/smb/client/sess.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/smb/client/sess.c b/fs/smb/client/sess.c
index 3d2548c35c9d..ed4bd88dd528 100644
--- a/fs/smb/client/sess.c
+++ b/fs/smb/client/sess.c
@@ -273,6 +273,8 @@ int cifs_try_adding_channels(struct cifs_ses *ses)
&iface->sockaddr,
rc);
kref_put(&iface->refcount, release_iface);
+ /* failure to add chan should increase weight */
+ iface->weight_fulfilled++;
continue;
}