|
Enzo Matsumiya |
f8381d |
From: Shyam Prasad N <sprasad@microsoft.com>
|
|
Enzo Matsumiya |
f8381d |
Date: Sat, 6 Nov 2021 11:31:53 +0000
|
|
Enzo Matsumiya |
f8381d |
Subject: [PATCH] cifs: nosharesock should not share socket with future
|
|
Enzo Matsumiya |
f8381d |
sessions
|
|
Enzo Matsumiya |
f8381d |
Git-commit: c9f1c19cf7c50949885fa5afdb2cb242d61a7fac
|
|
Enzo Matsumiya |
f8381d |
Patch-mainline: v5.16-rc1
|
|
Enzo Matsumiya |
f8381d |
References: bsc#1192606
|
|
Enzo Matsumiya |
f8381d |
|
|
Enzo Matsumiya |
f8381d |
Today, when a new mount is done with nosharesock, we ensure
|
|
Enzo Matsumiya |
f8381d |
that we don't select an existing matching session. However,
|
|
Enzo Matsumiya |
f8381d |
we don't mark the connection as nosharesock, which means that
|
|
Enzo Matsumiya |
f8381d |
those could be shared with future sessions.
|
|
Enzo Matsumiya |
f8381d |
|
|
Enzo Matsumiya |
f8381d |
Fixed it with this commit. Also printing this info in DebugData.
|
|
Enzo Matsumiya |
f8381d |
|
|
Enzo Matsumiya |
f8381d |
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
|
|
Enzo Matsumiya |
f8381d |
Reviewed-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
|
|
Enzo Matsumiya |
f8381d |
Signed-off-by: Steve French <stfrench@microsoft.com>
|
|
Enzo Matsumiya |
f8381d |
Acked-by: Enzo Matsumiya <ematsumiya@suse.de>
|
|
Enzo Matsumiya |
f8381d |
---
|
|
Enzo Matsumiya |
f8381d |
fs/cifs/cifs_debug.c | 2 ++
|
|
Enzo Matsumiya |
f8381d |
fs/cifs/cifsglob.h | 1 +
|
|
Enzo Matsumiya |
f8381d |
fs/cifs/connect.c | 8 +++++++-
|
|
Enzo Matsumiya |
f8381d |
3 files changed, 10 insertions(+), 1 deletion(-)
|
|
Enzo Matsumiya |
f8381d |
|
|
Enzo Matsumiya |
f8381d |
diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c
|
|
Enzo Matsumiya |
f8381d |
index de2c12bcfa4b..905a901f7f80 100644
|
|
Enzo Matsumiya |
f8381d |
--- a/fs/cifs/cifs_debug.c
|
|
Enzo Matsumiya |
f8381d |
+++ b/fs/cifs/cifs_debug.c
|
|
Enzo Matsumiya |
f8381d |
@@ -358,6 +358,8 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
|
|
Enzo Matsumiya |
f8381d |
seq_printf(m, " signed");
|
|
Enzo Matsumiya |
f8381d |
if (server->posix_ext_supported)
|
|
Enzo Matsumiya |
f8381d |
seq_printf(m, " posix");
|
|
Enzo Matsumiya |
f8381d |
+ if (server->nosharesock)
|
|
Enzo Matsumiya |
f8381d |
+ seq_printf(m, " nosharesock");
|
|
Enzo Matsumiya |
f8381d |
|
|
Enzo Matsumiya |
f8381d |
if (server->rdma)
|
|
Enzo Matsumiya |
f8381d |
seq_printf(m, "\nRDMA ");
|
|
Enzo Matsumiya |
f8381d |
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
|
|
Enzo Matsumiya |
f8381d |
index abff31dcd005..eeea520ede0a 100644
|
|
Enzo Matsumiya |
f8381d |
--- a/fs/cifs/cifsglob.h
|
|
Enzo Matsumiya |
f8381d |
+++ b/fs/cifs/cifsglob.h
|
|
Enzo Matsumiya |
f8381d |
@@ -592,6 +592,7 @@ struct TCP_Server_Info {
|
|
Enzo Matsumiya |
f8381d |
struct list_head pending_mid_q;
|
|
Enzo Matsumiya |
f8381d |
bool noblocksnd; /* use blocking sendmsg */
|
|
Enzo Matsumiya |
f8381d |
bool noautotune; /* do not autotune send buf sizes */
|
|
Enzo Matsumiya |
f8381d |
+ bool nosharesock;
|
|
Enzo Matsumiya |
f8381d |
bool tcp_nodelay;
|
|
Enzo Matsumiya |
f8381d |
unsigned int credits; /* send no more requests at once */
|
|
Enzo Matsumiya |
f8381d |
unsigned int max_credits; /* can override large 32000 default at mnt */
|
|
Enzo Matsumiya |
f8381d |
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
|
|
Enzo Matsumiya |
f8381d |
index 0abbff4e4135..24742b7402d1 100644
|
|
Enzo Matsumiya |
f8381d |
--- a/fs/cifs/connect.c
|
|
Enzo Matsumiya |
f8381d |
+++ b/fs/cifs/connect.c
|
|
Enzo Matsumiya |
f8381d |
@@ -1217,7 +1217,13 @@ static int match_server(struct TCP_Server_Info *server, struct smb3_fs_context *
|
|
Enzo Matsumiya |
f8381d |
{
|
|
Enzo Matsumiya |
f8381d |
struct sockaddr *addr = (struct sockaddr *)&ctx->dstaddr;
|
|
Enzo Matsumiya |
f8381d |
|
|
Enzo Matsumiya |
f8381d |
- if (ctx->nosharesock)
|
|
Enzo Matsumiya |
f8381d |
+ if (ctx->nosharesock) {
|
|
Enzo Matsumiya |
f8381d |
+ server->nosharesock = true;
|
|
Enzo Matsumiya |
f8381d |
+ return 0;
|
|
Enzo Matsumiya |
f8381d |
+ }
|
|
Enzo Matsumiya |
f8381d |
+
|
|
Enzo Matsumiya |
f8381d |
+ /* this server does not share socket */
|
|
Enzo Matsumiya |
f8381d |
+ if (server->nosharesock)
|
|
Enzo Matsumiya |
f8381d |
return 0;
|
|
Enzo Matsumiya |
f8381d |
|
|
Enzo Matsumiya |
f8381d |
/* If multidialect negotiation see if existing sessions match one */
|
|
Enzo Matsumiya |
f8381d |
--
|
|
Enzo Matsumiya |
f8381d |
2.33.1
|
|
Enzo Matsumiya |
f8381d |
|