|
Jiri Slaby |
7a187a |
From: Shyam Prasad N <sprasad@microsoft.com>
|
|
Jiri Slaby |
7a187a |
Date: Wed, 8 Mar 2023 12:11:31 +0000
|
|
Jiri Slaby |
7a187a |
Subject: [PATCH] cifs: do not poll server interfaces too regularly
|
|
Jiri Slaby |
7a187a |
References: bsc#1012628
|
|
Jiri Slaby |
7a187a |
Patch-mainline: 6.2.9
|
|
Jiri Slaby |
7a187a |
Git-commit: 072a28c8907c841f7d4b56c78bce46d3ee211e73
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
commit 072a28c8907c841f7d4b56c78bce46d3ee211e73 upstream.
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
We have the server interface list hanging off the tcon
|
|
Jiri Slaby |
7a187a |
structure today for reasons unknown. So each tcon which is
|
|
Jiri Slaby |
7a187a |
connected to a file server can query them separately,
|
|
Jiri Slaby |
7a187a |
which is really unnecessary. To avoid this, in the query
|
|
Jiri Slaby |
7a187a |
function, we will check the time of last update of the
|
|
Jiri Slaby |
7a187a |
interface list, and avoid querying the server if it is
|
|
Jiri Slaby |
7a187a |
within a certain range.
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
|
|
Jiri Slaby |
7a187a |
Reviewed-by: Paulo Alcantara (SUSE) <pc@manguebit.com>
|
|
Jiri Slaby |
7a187a |
Cc: stable@vger.kernel.org
|
|
Jiri Slaby |
7a187a |
Signed-off-by: Steve French <stfrench@microsoft.com>
|
|
Jiri Slaby |
7a187a |
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Jiri Slaby |
7a187a |
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
|
Jiri Slaby |
7a187a |
---
|
|
Jiri Slaby |
7a187a |
fs/cifs/smb2ops.c | 14 ++++++++++++++
|
|
Jiri Slaby |
7a187a |
1 file changed, 14 insertions(+)
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
|
|
Jiri Slaby |
7a187a |
index a9371f15..6a1db6ca 100644
|
|
Jiri Slaby |
7a187a |
--- a/fs/cifs/smb2ops.c
|
|
Jiri Slaby |
7a187a |
+++ b/fs/cifs/smb2ops.c
|
|
Jiri Slaby |
7a187a |
@@ -530,6 +530,14 @@ parse_server_interfaces(struct network_interface_info_ioctl_rsp *buf,
|
|
Jiri Slaby |
7a187a |
p = buf;
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
spin_lock(&ses->iface_lock);
|
|
Jiri Slaby |
7a187a |
+ /* do not query too frequently, this time with lock held */
|
|
Jiri Slaby |
7a187a |
+ if (ses->iface_last_update &&
|
|
Jiri Slaby |
7a187a |
+ time_before(jiffies, ses->iface_last_update +
|
|
Jiri Slaby |
7a187a |
+ (SMB_INTERFACE_POLL_INTERVAL * HZ))) {
|
|
Jiri Slaby |
7a187a |
+ spin_unlock(&ses->iface_lock);
|
|
Jiri Slaby |
7a187a |
+ return 0;
|
|
Jiri Slaby |
7a187a |
+ }
|
|
Jiri Slaby |
7a187a |
+
|
|
Jiri Slaby |
7a187a |
/*
|
|
Jiri Slaby |
7a187a |
* Go through iface_list and do kref_put to remove
|
|
Jiri Slaby |
7a187a |
* any unused ifaces. ifaces in use will be removed
|
|
Jiri Slaby |
7a187a |
@@ -696,6 +704,12 @@ SMB3_request_interfaces(const unsigned int xid, struct cifs_tcon *tcon, bool in_
|
|
Jiri Slaby |
7a187a |
struct network_interface_info_ioctl_rsp *out_buf = NULL;
|
|
Jiri Slaby |
7a187a |
struct cifs_ses *ses = tcon->ses;
|
|
Jiri Slaby |
7a187a |
|
|
Jiri Slaby |
7a187a |
+ /* do not query too frequently */
|
|
Jiri Slaby |
7a187a |
+ if (ses->iface_last_update &&
|
|
Jiri Slaby |
7a187a |
+ time_before(jiffies, ses->iface_last_update +
|
|
Jiri Slaby |
7a187a |
+ (SMB_INTERFACE_POLL_INTERVAL * HZ)))
|
|
Jiri Slaby |
7a187a |
+ return 0;
|
|
Jiri Slaby |
7a187a |
+
|
|
Jiri Slaby |
7a187a |
rc = SMB2_ioctl(xid, tcon, NO_FILE_ID, NO_FILE_ID,
|
|
Jiri Slaby |
7a187a |
FSCTL_QUERY_NETWORK_INTERFACE_INFO,
|
|
Jiri Slaby |
7a187a |
NULL /* no data input */, 0 /* no data input */,
|
|
Jiri Slaby |
7a187a |
--
|
|
Jiri Slaby |
7a187a |
2.35.3
|
|
Jiri Slaby |
7a187a |
|