linux-cifs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] cifs: reduce warning log level for server not advertising interfaces
@ 2024-03-13 10:40 nspmangalore
  2024-03-13 10:40 ` [PATCH 2/2] cifs: make sure server interfaces are requested only for SMB3+ nspmangalore
  2024-03-13 16:45 ` [PATCH 1/2] cifs: reduce warning log level for server not advertising interfaces Steve French
  0 siblings, 2 replies; 5+ messages in thread
From: nspmangalore @ 2024-03-13 10:40 UTC (permalink / raw)
  To: linux-cifs, smfrench, pc, bharathsm
  Cc: Shyam Prasad N, Stable, Jan Čermák

From: Shyam Prasad N <sprasad@microsoft.com>

Several users have reported this log getting dumped too regularly to
kernel log. The likely root cause has been identified, and it suggests
that this situation is expected for some configurations
(for example SMB2.1).

Since the function returns appropriately even for such cases, it is
fairly harmless to make this a debug log. When needed, the verbosity
can be increased to capture this log.

Cc: Stable <stable@vger.kernel.org>
Reported-by: Jan Čermák <sairon@sairon.cz>
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
---
 fs/smb/client/sess.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/smb/client/sess.c b/fs/smb/client/sess.c
index 8f37373fd333..37cdf5b55108 100644
--- a/fs/smb/client/sess.c
+++ b/fs/smb/client/sess.c
@@ -230,7 +230,7 @@ int cifs_try_adding_channels(struct cifs_ses *ses)
 		spin_lock(&ses->iface_lock);
 		if (!ses->iface_count) {
 			spin_unlock(&ses->iface_lock);
-			cifs_dbg(VFS, "server %s does not advertise interfaces\n",
+			cifs_dbg(FYI, "server %s does not advertise interfaces\n",
 				      ses->server->hostname);
 			break;
 		}
@@ -396,7 +396,7 @@ cifs_chan_update_iface(struct cifs_ses *ses, struct TCP_Server_Info *server)
 	spin_lock(&ses->iface_lock);
 	if (!ses->iface_count) {
 		spin_unlock(&ses->iface_lock);
-		cifs_dbg(VFS, "server %s does not advertise interfaces\n", ses->server->hostname);
+		cifs_dbg(FYI, "server %s does not advertise interfaces\n", ses->server->hostname);
 		return;
 	}
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] cifs: make sure server interfaces are requested only for SMB3+
  2024-03-13 10:40 [PATCH 1/2] cifs: reduce warning log level for server not advertising interfaces nspmangalore
@ 2024-03-13 10:40 ` nspmangalore
  2024-03-14  3:14   ` Steve French
  2024-03-13 16:45 ` [PATCH 1/2] cifs: reduce warning log level for server not advertising interfaces Steve French
  1 sibling, 1 reply; 5+ messages in thread
From: nspmangalore @ 2024-03-13 10:40 UTC (permalink / raw)
  To: linux-cifs, smfrench, pc, bharathsm
  Cc: Shyam Prasad N, Stable, Jan Čermák

From: Shyam Prasad N <sprasad@microsoft.com>

Some code paths for querying server interfaces make a false
assumption that it will only get called for SMB3+. Since this
function now can get called from a generic code paths, the correct
thing to do is to have specific handler for this functionality
per SMB dialect, and call this handler.

This change adds such a handler and implements this handler only
for SMB 3.0 and 3.1.1.

Cc: Stable <stable@vger.kernel.org>
Cc: Jan Čermák <sairon@sairon.cz>
Reported-by: Paulo Alcantara <pc@manguebit.com>
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
---
 fs/smb/client/cifsglob.h | 3 +++
 fs/smb/client/connect.c  | 6 +++++-
 fs/smb/client/smb2ops.c  | 2 ++
 fs/smb/client/smb2pdu.c  | 5 +++--
 4 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/fs/smb/client/cifsglob.h b/fs/smb/client/cifsglob.h
index 53c75cfb33ab..b29b57ab9807 100644
--- a/fs/smb/client/cifsglob.h
+++ b/fs/smb/client/cifsglob.h
@@ -346,6 +346,9 @@ struct smb_version_operations {
 	/* informational QFS call */
 	void (*qfs_tcon)(const unsigned int, struct cifs_tcon *,
 			 struct cifs_sb_info *);
+	/* query for server interfaces */
+	int (*query_server_interfaces)(const unsigned int, struct cifs_tcon *,
+				       bool);
 	/* check if a path is accessible or not */
 	int (*is_path_accessible)(const unsigned int, struct cifs_tcon *,
 				  struct cifs_sb_info *, const char *);
diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c
index ac9595504f4b..234160460615 100644
--- a/fs/smb/client/connect.c
+++ b/fs/smb/client/connect.c
@@ -123,12 +123,16 @@ static void smb2_query_server_interfaces(struct work_struct *work)
 	struct cifs_tcon *tcon = container_of(work,
 					struct cifs_tcon,
 					query_interfaces.work);
+	struct TCP_Server_Info *server = tcon->ses->server;
 
 	/*
 	 * query server network interfaces, in case they change
 	 */
+	if (!server->ops->query_server_interfaces)
+		return;
+
 	xid = get_xid();
-	rc = SMB3_request_interfaces(xid, tcon, false);
+	rc = server->ops->query_server_interfaces(xid, tcon, false);
 	free_xid(xid);
 
 	if (rc) {
diff --git a/fs/smb/client/smb2ops.c b/fs/smb/client/smb2ops.c
index 4695433fcf39..3b8896987197 100644
--- a/fs/smb/client/smb2ops.c
+++ b/fs/smb/client/smb2ops.c
@@ -5538,6 +5538,7 @@ struct smb_version_operations smb30_operations = {
 	.tree_connect = SMB2_tcon,
 	.tree_disconnect = SMB2_tdis,
 	.qfs_tcon = smb3_qfs_tcon,
+	.query_server_interfaces = SMB3_request_interfaces,
 	.is_path_accessible = smb2_is_path_accessible,
 	.can_echo = smb2_can_echo,
 	.echo = SMB2_echo,
@@ -5653,6 +5654,7 @@ struct smb_version_operations smb311_operations = {
 	.tree_connect = SMB2_tcon,
 	.tree_disconnect = SMB2_tdis,
 	.qfs_tcon = smb3_qfs_tcon,
+	.query_server_interfaces = SMB3_request_interfaces,
 	.is_path_accessible = smb2_is_path_accessible,
 	.can_echo = smb2_can_echo,
 	.echo = SMB2_echo,
diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c
index 608ee05491e2..4fa47c59cc04 100644
--- a/fs/smb/client/smb2pdu.c
+++ b/fs/smb/client/smb2pdu.c
@@ -409,14 +409,15 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon,
 	spin_unlock(&ses->ses_lock);
 
 	if (!rc &&
-	    (server->capabilities & SMB2_GLOBAL_CAP_MULTI_CHANNEL)) {
+	    (server->capabilities & SMB2_GLOBAL_CAP_MULTI_CHANNEL) &&
+	    server->ops->query_server_interfaces) {
 		mutex_unlock(&ses->session_mutex);
 
 		/*
 		 * query server network interfaces, in case they change
 		 */
 		xid = get_xid();
-		rc = SMB3_request_interfaces(xid, tcon, false);
+		rc = server->ops->query_server_interfaces(xid, tcon, false);
 		free_xid(xid);
 
 		if (rc == -EOPNOTSUPP && ses->chan_count > 1) {
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] cifs: reduce warning log level for server not advertising interfaces
  2024-03-13 10:40 [PATCH 1/2] cifs: reduce warning log level for server not advertising interfaces nspmangalore
  2024-03-13 10:40 ` [PATCH 2/2] cifs: make sure server interfaces are requested only for SMB3+ nspmangalore
@ 2024-03-13 16:45 ` Steve French
  2024-03-14 17:16   ` Steve French
  1 sibling, 1 reply; 5+ messages in thread
From: Steve French @ 2024-03-13 16:45 UTC (permalink / raw)
  To: nspmangalore
  Cc: linux-cifs, pc, bharathsm, Shyam Prasad N, Stable, Jan Čermák

what about simply a "warn_once" since it is useful for the user to
know that their server does not advertise interfaces so can affect
performance (multichannel) and perhaps some reconnect scenarios.

On Wed, Mar 13, 2024 at 5:40 AM <nspmangalore@gmail.com> wrote:
>
> From: Shyam Prasad N <sprasad@microsoft.com>
>
> Several users have reported this log getting dumped too regularly to
> kernel log. The likely root cause has been identified, and it suggests
> that this situation is expected for some configurations
> (for example SMB2.1).
>
> Since the function returns appropriately even for such cases, it is
> fairly harmless to make this a debug log. When needed, the verbosity
> can be increased to capture this log.
>
> Cc: Stable <stable@vger.kernel.org>
> Reported-by: Jan Čermák <sairon@sairon.cz>
> Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
> ---
>  fs/smb/client/sess.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/smb/client/sess.c b/fs/smb/client/sess.c
> index 8f37373fd333..37cdf5b55108 100644
> --- a/fs/smb/client/sess.c
> +++ b/fs/smb/client/sess.c
> @@ -230,7 +230,7 @@ int cifs_try_adding_channels(struct cifs_ses *ses)
>                 spin_lock(&ses->iface_lock);
>                 if (!ses->iface_count) {
>                         spin_unlock(&ses->iface_lock);
> -                       cifs_dbg(VFS, "server %s does not advertise interfaces\n",
> +                       cifs_dbg(FYI, "server %s does not advertise interfaces\n",
>                                       ses->server->hostname);
>                         break;
>                 }
> @@ -396,7 +396,7 @@ cifs_chan_update_iface(struct cifs_ses *ses, struct TCP_Server_Info *server)
>         spin_lock(&ses->iface_lock);
>         if (!ses->iface_count) {
>                 spin_unlock(&ses->iface_lock);
> -               cifs_dbg(VFS, "server %s does not advertise interfaces\n", ses->server->hostname);
> +               cifs_dbg(FYI, "server %s does not advertise interfaces\n", ses->server->hostname);
>                 return;
>         }
>
> --
> 2.34.1
>


-- 
Thanks,

Steve

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 2/2] cifs: make sure server interfaces are requested only for SMB3+
  2024-03-13 10:40 ` [PATCH 2/2] cifs: make sure server interfaces are requested only for SMB3+ nspmangalore
@ 2024-03-14  3:14   ` Steve French
  0 siblings, 0 replies; 5+ messages in thread
From: Steve French @ 2024-03-14  3:14 UTC (permalink / raw)
  To: nspmangalore
  Cc: linux-cifs, pc, bharathsm, Shyam Prasad N, Stable, Jan Čermák

tentatively merged to cifs-2.6.git for-next pending testing and
additional review

On Wed, Mar 13, 2024 at 5:40 AM <nspmangalore@gmail.com> wrote:
>
> From: Shyam Prasad N <sprasad@microsoft.com>
>
> Some code paths for querying server interfaces make a false
> assumption that it will only get called for SMB3+. Since this
> function now can get called from a generic code paths, the correct
> thing to do is to have specific handler for this functionality
> per SMB dialect, and call this handler.
>
> This change adds such a handler and implements this handler only
> for SMB 3.0 and 3.1.1.
>
> Cc: Stable <stable@vger.kernel.org>
> Cc: Jan Čermák <sairon@sairon.cz>
> Reported-by: Paulo Alcantara <pc@manguebit.com>
> Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
> ---
>  fs/smb/client/cifsglob.h | 3 +++
>  fs/smb/client/connect.c  | 6 +++++-
>  fs/smb/client/smb2ops.c  | 2 ++
>  fs/smb/client/smb2pdu.c  | 5 +++--
>  4 files changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/fs/smb/client/cifsglob.h b/fs/smb/client/cifsglob.h
> index 53c75cfb33ab..b29b57ab9807 100644
> --- a/fs/smb/client/cifsglob.h
> +++ b/fs/smb/client/cifsglob.h
> @@ -346,6 +346,9 @@ struct smb_version_operations {
>         /* informational QFS call */
>         void (*qfs_tcon)(const unsigned int, struct cifs_tcon *,
>                          struct cifs_sb_info *);
> +       /* query for server interfaces */
> +       int (*query_server_interfaces)(const unsigned int, struct cifs_tcon *,
> +                                      bool);
>         /* check if a path is accessible or not */
>         int (*is_path_accessible)(const unsigned int, struct cifs_tcon *,
>                                   struct cifs_sb_info *, const char *);
> diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c
> index ac9595504f4b..234160460615 100644
> --- a/fs/smb/client/connect.c
> +++ b/fs/smb/client/connect.c
> @@ -123,12 +123,16 @@ static void smb2_query_server_interfaces(struct work_struct *work)
>         struct cifs_tcon *tcon = container_of(work,
>                                         struct cifs_tcon,
>                                         query_interfaces.work);
> +       struct TCP_Server_Info *server = tcon->ses->server;
>
>         /*
>          * query server network interfaces, in case they change
>          */
> +       if (!server->ops->query_server_interfaces)
> +               return;
> +
>         xid = get_xid();
> -       rc = SMB3_request_interfaces(xid, tcon, false);
> +       rc = server->ops->query_server_interfaces(xid, tcon, false);
>         free_xid(xid);
>
>         if (rc) {
> diff --git a/fs/smb/client/smb2ops.c b/fs/smb/client/smb2ops.c
> index 4695433fcf39..3b8896987197 100644
> --- a/fs/smb/client/smb2ops.c
> +++ b/fs/smb/client/smb2ops.c
> @@ -5538,6 +5538,7 @@ struct smb_version_operations smb30_operations = {
>         .tree_connect = SMB2_tcon,
>         .tree_disconnect = SMB2_tdis,
>         .qfs_tcon = smb3_qfs_tcon,
> +       .query_server_interfaces = SMB3_request_interfaces,
>         .is_path_accessible = smb2_is_path_accessible,
>         .can_echo = smb2_can_echo,
>         .echo = SMB2_echo,
> @@ -5653,6 +5654,7 @@ struct smb_version_operations smb311_operations = {
>         .tree_connect = SMB2_tcon,
>         .tree_disconnect = SMB2_tdis,
>         .qfs_tcon = smb3_qfs_tcon,
> +       .query_server_interfaces = SMB3_request_interfaces,
>         .is_path_accessible = smb2_is_path_accessible,
>         .can_echo = smb2_can_echo,
>         .echo = SMB2_echo,
> diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c
> index 608ee05491e2..4fa47c59cc04 100644
> --- a/fs/smb/client/smb2pdu.c
> +++ b/fs/smb/client/smb2pdu.c
> @@ -409,14 +409,15 @@ smb2_reconnect(__le16 smb2_command, struct cifs_tcon *tcon,
>         spin_unlock(&ses->ses_lock);
>
>         if (!rc &&
> -           (server->capabilities & SMB2_GLOBAL_CAP_MULTI_CHANNEL)) {
> +           (server->capabilities & SMB2_GLOBAL_CAP_MULTI_CHANNEL) &&
> +           server->ops->query_server_interfaces) {
>                 mutex_unlock(&ses->session_mutex);
>
>                 /*
>                  * query server network interfaces, in case they change
>                  */
>                 xid = get_xid();
> -               rc = SMB3_request_interfaces(xid, tcon, false);
> +               rc = server->ops->query_server_interfaces(xid, tcon, false);
>                 free_xid(xid);
>
>                 if (rc == -EOPNOTSUPP && ses->chan_count > 1) {
> --
> 2.34.1
>


-- 
Thanks,

Steve

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] cifs: reduce warning log level for server not advertising interfaces
  2024-03-13 16:45 ` [PATCH 1/2] cifs: reduce warning log level for server not advertising interfaces Steve French
@ 2024-03-14 17:16   ` Steve French
  0 siblings, 0 replies; 5+ messages in thread
From: Steve French @ 2024-03-14 17:16 UTC (permalink / raw)
  To: nspmangalore
  Cc: linux-cifs, pc, bharathsm, Shyam Prasad N, Stable, Jan Čermák

[-- Attachment #1: Type: text/plain, Size: 2508 bytes --]

updated patch to change to warn once, and to fix a minor checkpatch
warning (about format of stable tag)


On Wed, Mar 13, 2024 at 11:45 AM Steve French <smfrench@gmail.com> wrote:
>
> what about simply a "warn_once" since it is useful for the user to
> know that their server does not advertise interfaces so can affect
> performance (multichannel) and perhaps some reconnect scenarios.
>
> On Wed, Mar 13, 2024 at 5:40 AM <nspmangalore@gmail.com> wrote:
> >
> > From: Shyam Prasad N <sprasad@microsoft.com>
> >
> > Several users have reported this log getting dumped too regularly to
> > kernel log. The likely root cause has been identified, and it suggests
> > that this situation is expected for some configurations
> > (for example SMB2.1).
> >
> > Since the function returns appropriately even for such cases, it is
> > fairly harmless to make this a debug log. When needed, the verbosity
> > can be increased to capture this log.
> >
> > Cc: Stable <stable@vger.kernel.org>
> > Reported-by: Jan Čermák <sairon@sairon.cz>
> > Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
> > ---
> >  fs/smb/client/sess.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/fs/smb/client/sess.c b/fs/smb/client/sess.c
> > index 8f37373fd333..37cdf5b55108 100644
> > --- a/fs/smb/client/sess.c
> > +++ b/fs/smb/client/sess.c
> > @@ -230,7 +230,7 @@ int cifs_try_adding_channels(struct cifs_ses *ses)
> >                 spin_lock(&ses->iface_lock);
> >                 if (!ses->iface_count) {
> >                         spin_unlock(&ses->iface_lock);
> > -                       cifs_dbg(VFS, "server %s does not advertise interfaces\n",
> > +                       cifs_dbg(FYI, "server %s does not advertise interfaces\n",
> >                                       ses->server->hostname);
> >                         break;
> >                 }
> > @@ -396,7 +396,7 @@ cifs_chan_update_iface(struct cifs_ses *ses, struct TCP_Server_Info *server)
> >         spin_lock(&ses->iface_lock);
> >         if (!ses->iface_count) {
> >                 spin_unlock(&ses->iface_lock);
> > -               cifs_dbg(VFS, "server %s does not advertise interfaces\n", ses->server->hostname);
> > +               cifs_dbg(FYI, "server %s does not advertise interfaces\n", ses->server->hostname);
> >                 return;
> >         }
> >
> > --
> > 2.34.1
> >
>
>
> --
> Thanks,
>
> Steve



-- 
Thanks,

Steve

[-- Attachment #2: 0002-cifs-reduce-warning-log-level-for-server-not-adverti.patch --]
[-- Type: text/x-patch, Size: 1881 bytes --]

From 21dd8df65a7f87ecc928ad325ab163ab08a556be Mon Sep 17 00:00:00 2001
From: Shyam Prasad N <sprasad@microsoft.com>
Date: Wed, 13 Mar 2024 10:40:40 +0000
Subject: [PATCH 2/4] cifs: reduce warning log level for server not advertising
 interfaces
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Several users have reported this log getting dumped too regularly to
kernel log. The likely root cause has been identified, and it suggests
that this situation is expected for some configurations
(for example SMB2.1).

Since the function returns appropriately even for such cases, it is
fairly harmless to make this a debug log. When needed, the verbosity
can be increased to capture this log.

Cc: stable@vger.kernel.org
Reported-by: Jan Čermák <sairon@sairon.cz>
Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
---
 fs/smb/client/sess.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/smb/client/sess.c b/fs/smb/client/sess.c
index 8f37373fd333..3216f786908f 100644
--- a/fs/smb/client/sess.c
+++ b/fs/smb/client/sess.c
@@ -230,7 +230,7 @@ int cifs_try_adding_channels(struct cifs_ses *ses)
 		spin_lock(&ses->iface_lock);
 		if (!ses->iface_count) {
 			spin_unlock(&ses->iface_lock);
-			cifs_dbg(VFS, "server %s does not advertise interfaces\n",
+			cifs_dbg(ONCE, "server %s does not advertise interfaces\n",
 				      ses->server->hostname);
 			break;
 		}
@@ -396,7 +396,7 @@ cifs_chan_update_iface(struct cifs_ses *ses, struct TCP_Server_Info *server)
 	spin_lock(&ses->iface_lock);
 	if (!ses->iface_count) {
 		spin_unlock(&ses->iface_lock);
-		cifs_dbg(VFS, "server %s does not advertise interfaces\n", ses->server->hostname);
+		cifs_dbg(ONCE, "server %s does not advertise interfaces\n", ses->server->hostname);
 		return;
 	}
 
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-03-14 17:16 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-13 10:40 [PATCH 1/2] cifs: reduce warning log level for server not advertising interfaces nspmangalore
2024-03-13 10:40 ` [PATCH 2/2] cifs: make sure server interfaces are requested only for SMB3+ nspmangalore
2024-03-14  3:14   ` Steve French
2024-03-13 16:45 ` [PATCH 1/2] cifs: reduce warning log level for server not advertising interfaces Steve French
2024-03-14 17:16   ` Steve French

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).