summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorShyam Prasad N <sprasad@microsoft.com>2021-07-19 15:59:14 +0200
committerSteve French <stfrench@microsoft.com>2021-11-13 06:29:08 +0100
commit46bb1b9484aeaf701da50c9ee063f3e93ce2a37b (patch)
tree3ee55bf38d941e4c5e015ce52378153e279e9993 /fs
parentcifs: connect individual channel servers to primary channel server (diff)
downloadlinux-46bb1b9484aeaf701da50c9ee063f3e93ce2a37b.tar.xz
linux-46bb1b9484aeaf701da50c9ee063f3e93ce2a37b.zip
cifs: do not duplicate fscache cookie for secondary channels
We allocate index cookies for each connection from the client. However, we don't need this index for each channel in case of multichannel. So making sure that we avoid creating duplicate cookies by instantiating only for primary channel. Signed-off-by: Shyam Prasad N <sprasad@microsoft.com> Reviewed-by: Paulo Alcantara (SUSE) <pc@cjr.nz> Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/cifs/connect.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index f80b73f2d0a0..82577a7a5bb1 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -1397,7 +1397,10 @@ cifs_put_tcp_session(struct TCP_Server_Info *server, int from_reconnect)
spin_unlock(&GlobalMid_Lock);
cifs_crypto_secmech_release(server);
- cifs_fscache_release_client_cookie(server);
+
+ /* fscache server cookies are based on primary channel only */
+ if (!CIFS_SERVER_IS_CHAN(server))
+ cifs_fscache_release_client_cookie(server);
kfree(server->session_key.response);
server->session_key.response = NULL;
@@ -1553,7 +1556,9 @@ smbd_connected:
list_add(&tcp_ses->tcp_ses_list, &cifs_tcp_ses_list);
spin_unlock(&cifs_tcp_ses_lock);
- cifs_fscache_get_client_cookie(tcp_ses);
+ /* fscache server cookies are based on primary channel only */
+ if (!CIFS_SERVER_IS_CHAN(tcp_ses))
+ cifs_fscache_get_client_cookie(tcp_ses);
/* queue echo request delayed work */
queue_delayed_work(cifsiod_wq, &tcp_ses->echo, tcp_ses->echo_interval);