diff options
author | Enzo Matsumiya <ematsumiya@suse.de> | 2025-06-22 14:07:00 -0300 |
---|---|---|
committer | Enzo Matsumiya <ematsumiya@suse.de> | 2025-06-22 14:07:00 -0300 |
commit | d829bbabf99c4bfbdb82a1a8d24d71e76f3dd53b (patch) | |
tree | 4e42e053609148a50bea5c7ff7cf576da1bc7cb5 /fs/smb/client/connect.c | |
parent | 7e1463abd54e949295b19897eafe12583699d603 (diff) | |
download | linux-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.c | 26 |
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); |