summaryrefslogtreecommitdiff
path: root/fs/smb/client/connect.c
diff options
context:
space:
mode:
authorEnzo Matsumiya <ematsumiya@suse.de>2025-06-22 14:07:00 -0300
committerEnzo Matsumiya <ematsumiya@suse.de>2025-06-22 14:07:00 -0300
commitd829bbabf99c4bfbdb82a1a8d24d71e76f3dd53b (patch)
tree4e42e053609148a50bea5c7ff7cf576da1bc7cb5 /fs/smb/client/connect.c
parent7e1463abd54e949295b19897eafe12583699d603 (diff)
downloadlinux-d829bbabf99c4bfbdb82a1a8d24d71e76f3dd53b.tar.gz
linux-d829bbabf99c4bfbdb82a1a8d24d71e76f3dd53b.tar.bz2
linux-d829bbabf99c4bfbdb82a1a8d24d71e76f3dd53b.zip
smb: client: chan pick WIP (46s)
Signed-off-by: Enzo Matsumiya <ematsumiya@suse.de>
Diffstat (limited to 'fs/smb/client/connect.c')
-rw-r--r--fs/smb/client/connect.c26
1 files changed, 11 insertions, 15 deletions
diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c
index 261d78fe2ff2..90c8286ae39d 100644
--- a/fs/smb/client/connect.c
+++ b/fs/smb/client/connect.c
@@ -282,7 +282,7 @@ cifs_abort_connection(struct TCP_Server_Info *server)
kfree_sensitive(server->session_key.response);
server->session_key.response = NULL;
server->session_key.len = 0;
- atomic_long_set(&server->lstrp, jiffies);
+ server->lstrp = jiffies;
/* mark submitted MIDs for retry and issue callback */
INIT_LIST_HEAD(&retry_list);
@@ -583,7 +583,6 @@ cifs_echo_request(struct work_struct *work)
int rc;
struct TCP_Server_Info *server = container_of(work,
struct TCP_Server_Info, echo.work);
- unsigned long lstrp = atomic_long_read(&server->lstrp);
/*
* We cannot send an echo if it is disabled.
@@ -594,7 +593,7 @@ cifs_echo_request(struct work_struct *work)
server->tcpStatus == CifsExiting ||
server->tcpStatus == CifsNew ||
(server->ops->can_echo && !server->ops->can_echo(server)) ||
- time_before(jiffies, lstrp + server->echo_interval - HZ))
+ time_before(jiffies, server->lstrp + server->echo_interval - HZ))
goto requeue_echo;
rc = server->ops->echo ? server->ops->echo(server) : -ENOSYS;
@@ -643,8 +642,6 @@ allocate_buffers(struct TCP_Server_Info *server)
static bool
server_unresponsive(struct TCP_Server_Info *server)
{
- unsigned long lstrp = atomic_long_read(&server->lstrp);
-
/*
* If we're in the process of mounting a share or reconnecting a session
* and the server abruptly shut down (e.g. socket wasn't closed, packet
@@ -653,7 +650,7 @@ server_unresponsive(struct TCP_Server_Info *server)
*/
spin_lock(&server->srv_lock);
if (server->tcpStatus == CifsInNegotiate &&
- time_after(jiffies, lstrp + 20 * HZ)) {
+ time_after(jiffies, server->lstrp + 20 * HZ)) {
spin_unlock(&server->srv_lock);
cifs_reconnect(server, false);
return true;
@@ -672,7 +669,7 @@ server_unresponsive(struct TCP_Server_Info *server)
if ((server->tcpStatus == CifsGood ||
server->tcpStatus == CifsNeedNegotiate) &&
(!server->ops->can_echo || server->ops->can_echo(server)) &&
- time_after(jiffies, lstrp + 3 * server->echo_interval)) {
+ time_after(jiffies, server->lstrp + 3 * server->echo_interval)) {
spin_unlock(&server->srv_lock);
cifs_server_dbg(VFS, "has not responded in %lu seconds. Reconnecting...\n",
(3 * server->echo_interval) / HZ);
@@ -1348,7 +1345,7 @@ next_pdu:
}
}
- atomic_long_set(&server->lstrp, jiffies);
+ server->lstrp = jiffies;
for (i = 0; i < num_mids; i++) {
if (mids[i] != NULL) {
@@ -1842,8 +1839,7 @@ cifs_get_tcp_session(struct smb3_fs_context *ctx,
tcp_ses->sequence_number = 0;
tcp_ses->channel_sequence_num = 0; /* only tracked for primary channel */
tcp_ses->reconnect_instance = 1;
- atomic_long_set(&tcp_ses->lstrq, 0);
- atomic_long_set(&tcp_ses->lstrp, jiffies);
+ tcp_ses->lstrp = jiffies;
tcp_ses->compression.requested = ctx->compress;
spin_lock_init(&tcp_ses->req_lock);
spin_lock_init(&tcp_ses->srv_lock);
@@ -2184,11 +2180,11 @@ void __cifs_put_smb_ses(struct cifs_ses *ses)
list_del_init(&ses->smb_ses_list);
spin_unlock(&cifs_tcp_ses_lock);
- pr_err("%s: fast %zu, slow %zu\n", __func__, ses->fast_picks, ses->slow_picks);
+ pr_err("%s: channel changes %zu, fast %zu, slow %zu\n", __func__, ses->chan_changes, ses->fast_picks, ses->slow_picks);
/* close any extra channels */
for (i = 1; i < ses->chan_count; i++) {
- list_del_init(&ses->chans[i].lru_head);
+ list_del_init(&ses->chans[i].head);
if (ses->chans[i].iface) {
kref_put(&ses->chans[i].iface->refcount, release_iface);
ses->chans[i].iface = NULL;
@@ -2199,7 +2195,7 @@ void __cifs_put_smb_ses(struct cifs_ses *ses)
/* we now account for primary channel in iface->refcount */
if (ses->chans[0].iface) {
- list_del_init(&ses->chans[0].lru_head);
+ list_del_init(&ses->chans[0].head);
kref_put(&ses->chans[0].iface->refcount, release_iface);
ses->chans[0].server = NULL;
}
@@ -2516,7 +2512,7 @@ retry_old_session:
/* add server as first channel */
spin_lock(&ses->chan_lock);
ses->chans[0].server = server;
- list_add(&ses->chans[0].lru_head, &ses->chans_lru);
+ list_add(&ses->chans[0].head, &ses->chans_lru);
ses->chan_count = 1;
ses->chan_max = ctx->multichannel ? ctx->max_channels:1;
ses->chans_need_reconnect = 1;
@@ -4235,7 +4231,7 @@ retry:
return 0;
}
- atomic_long_set(&server->lstrp, jiffies);
+ server->lstrp = jiffies;
server->tcpStatus = CifsInNegotiate;
spin_unlock(&server->srv_lock);