From: nspmangalore@gmail.com
To: smfrench@gmail.com, linux-cifs@vger.kernel.org, pc@manguebit.com,
meetakshisetiyaoss@gmail.com
Cc: Shyam Prasad N <sprasad@microsoft.com>
Subject: [PATCH 3/4] cifs: cifs_pick_channel should skip unhealthy channels
Date: Fri, 29 Dec 2023 11:16:17 +0000 [thread overview]
Message-ID: <20231229111618.38887-3-sprasad@microsoft.com> (raw)
In-Reply-To: <20231229111618.38887-1-sprasad@microsoft.com>
From: Shyam Prasad N <sprasad@microsoft.com>
cifs_pick_channel does not take into account the current
state of the channel today. As a result, if some channels
are unhealthy, they could still get picked, resulting
in unnecessary errors.
This change checks the channel transport status before
making the choice. If all channels are unhealthy, the
primary channel will be returned anyway.
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
---
fs/smb/client/transport.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/fs/smb/client/transport.c b/fs/smb/client/transport.c
index 4f717ad7c21b..f8e6636e90a3 100644
--- a/fs/smb/client/transport.c
+++ b/fs/smb/client/transport.c
@@ -1026,6 +1026,19 @@ struct TCP_Server_Info *cifs_pick_channel(struct cifs_ses *ses)
if (!server || server->terminate)
continue;
+ /*
+ * do not pick a channel that's not healthy.
+ * if all channels are unhealthy, we'll use
+ * the primary channel
+ */
+ spin_lock(&server->srv_lock);
+ if (server->tcpStatus != CifsNew &&
+ server->tcpStatus != CifsGood) {
+ spin_unlock(&server->srv_lock);
+ continue;
+ }
+ spin_unlock(&server->srv_lock);
+
/*
* strictly speaking, we should pick up req_lock to read
* server->in_flight. But it shouldn't matter much here if we
--
2.34.1
next prev parent reply other threads:[~2023-12-29 11:16 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-29 11:16 [PATCH 1/4] cifs: cifs_chan_is_iface_active should be called with chan_lock held nspmangalore
2023-12-29 11:16 ` [PATCH 2/4] cifs: do not depend on release_iface for maintaining iface_list nspmangalore
2023-12-29 11:19 ` Shyam Prasad N
2023-12-29 11:16 ` nspmangalore [this message]
2023-12-29 17:02 ` [PATCH 3/4] cifs: cifs_pick_channel should skip unhealthy channels Shyam Prasad N
2023-12-29 17:15 ` Steve French
2023-12-29 11:16 ` [PATCH 4/4] cifs: fix in logging in cifs_chan_update_iface nspmangalore
2023-12-29 11:25 ` [PATCH 1/4] cifs: cifs_chan_is_iface_active should be called with chan_lock held Shyam Prasad N
2023-12-29 14:57 ` Steve French
2023-12-29 15:01 ` Steve French
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231229111618.38887-3-sprasad@microsoft.com \
--to=nspmangalore@gmail.com \
--cc=linux-cifs@vger.kernel.org \
--cc=meetakshisetiyaoss@gmail.com \
--cc=pc@manguebit.com \
--cc=smfrench@gmail.com \
--cc=sprasad@microsoft.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox