Jiri Slaby 7a187a
From: Shyam Prasad N <sprasad@microsoft.com>
Jiri Slaby 7a187a
Date: Mon, 13 Mar 2023 11:09:12 +0000
Jiri Slaby 7a187a
Subject: [PATCH] cifs: dump pending mids for all channels in DebugData
Jiri Slaby 7a187a
References: bsc#1012628
Jiri Slaby 7a187a
Patch-mainline: 6.2.9
Jiri Slaby 7a187a
Git-commit: d12bc6d26f92c51b28e8f4a146ffcc630b688198
Jiri Slaby 7a187a
Jiri Slaby 7a187a
commit d12bc6d26f92c51b28e8f4a146ffcc630b688198 upstream.
Jiri Slaby 7a187a
Jiri Slaby 7a187a
Currently, we only dump the pending mid information only
Jiri Slaby 7a187a
on the primary channel in /proc/fs/cifs/DebugData.
Jiri Slaby 7a187a
If multichannel is active, we do not print the pending MID
Jiri Slaby 7a187a
list on secondary channels.
Jiri Slaby 7a187a
Jiri Slaby 7a187a
This change will dump the pending mids for all the channels
Jiri Slaby 7a187a
based on server->conn_id.
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/cifs_debug.c | 41 +++++++++++++++++++++++++++--------------
Jiri Slaby 7a187a
 1 file changed, 27 insertions(+), 14 deletions(-)
Jiri Slaby 7a187a
Jiri Slaby 7a187a
diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c
Jiri Slaby 7a187a
index d9876bd3..325b5bd4 100644
Jiri Slaby 7a187a
--- a/fs/cifs/cifs_debug.c
Jiri Slaby 7a187a
+++ b/fs/cifs/cifs_debug.c
Jiri Slaby 7a187a
@@ -215,6 +215,7 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
Jiri Slaby 7a187a
 {
Jiri Slaby 7a187a
 	struct mid_q_entry *mid_entry;
Jiri Slaby 7a187a
 	struct TCP_Server_Info *server;
Jiri Slaby 7a187a
+	struct TCP_Server_Info *chan_server;
Jiri Slaby 7a187a
 	struct cifs_ses *ses;
Jiri Slaby 7a187a
 	struct cifs_tcon *tcon;
Jiri Slaby 7a187a
 	struct cifs_server_iface *iface;
Jiri Slaby 7a187a
@@ -471,23 +472,35 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
Jiri Slaby 7a187a
 					seq_puts(m, "\t\t[CONNECTED]\n");
Jiri Slaby 7a187a
 			}
Jiri Slaby 7a187a
 			spin_unlock(&ses->iface_lock);
Jiri Slaby 7a187a
+
Jiri Slaby 7a187a
+			seq_puts(m, "\n\n\tMIDs: ");
Jiri Slaby 7a187a
+			spin_lock(&ses->chan_lock);
Jiri Slaby 7a187a
+			for (j = 0; j < ses->chan_count; j++) {
Jiri Slaby 7a187a
+				chan_server = ses->chans[j].server;
Jiri Slaby 7a187a
+				if (!chan_server)
Jiri Slaby 7a187a
+					continue;
Jiri Slaby 7a187a
+
Jiri Slaby 7a187a
+				if (list_empty(&chan_server->pending_mid_q))
Jiri Slaby 7a187a
+					continue;
Jiri Slaby 7a187a
+
Jiri Slaby 7a187a
+				seq_printf(m, "\n\tServer ConnectionId: 0x%llx",
Jiri Slaby 7a187a
+					   chan_server->conn_id);
Jiri Slaby 7a187a
+				spin_lock(&chan_server->mid_lock);
Jiri Slaby 7a187a
+				list_for_each_entry(mid_entry, &chan_server->pending_mid_q, qhead) {
Jiri Slaby 7a187a
+					seq_printf(m, "\n\t\tState: %d com: %d pid: %d cbdata: %p mid %llu",
Jiri Slaby 7a187a
+						   mid_entry->mid_state,
Jiri Slaby 7a187a
+						   le16_to_cpu(mid_entry->command),
Jiri Slaby 7a187a
+						   mid_entry->pid,
Jiri Slaby 7a187a
+						   mid_entry->callback_data,
Jiri Slaby 7a187a
+						   mid_entry->mid);
Jiri Slaby 7a187a
+				}
Jiri Slaby 7a187a
+				spin_unlock(&chan_server->mid_lock);
Jiri Slaby 7a187a
+			}
Jiri Slaby 7a187a
+			spin_unlock(&ses->chan_lock);
Jiri Slaby 7a187a
+			seq_puts(m, "\n--\n");
Jiri Slaby 7a187a
 		}
Jiri Slaby 7a187a
 		if (i == 0)
Jiri Slaby 7a187a
 			seq_printf(m, "\n\t\t[NONE]");
Jiri Slaby 7a187a
-
Jiri Slaby 7a187a
-		seq_puts(m, "\n\n\tMIDs: ");
Jiri Slaby 7a187a
-		spin_lock(&server->mid_lock);
Jiri Slaby 7a187a
-		list_for_each_entry(mid_entry, &server->pending_mid_q, qhead) {
Jiri Slaby 7a187a
-			seq_printf(m, "\n\tState: %d com: %d pid:"
Jiri Slaby 7a187a
-					" %d cbdata: %p mid %llu\n",
Jiri Slaby 7a187a
-					mid_entry->mid_state,
Jiri Slaby 7a187a
-					le16_to_cpu(mid_entry->command),
Jiri Slaby 7a187a
-					mid_entry->pid,
Jiri Slaby 7a187a
-					mid_entry->callback_data,
Jiri Slaby 7a187a
-					mid_entry->mid);
Jiri Slaby 7a187a
-		}
Jiri Slaby 7a187a
-		spin_unlock(&server->mid_lock);
Jiri Slaby 7a187a
-		seq_printf(m, "\n--\n");
Jiri Slaby 7a187a
 	}
Jiri Slaby 7a187a
 	if (c == 0)
Jiri Slaby 7a187a
 		seq_printf(m, "\n\t[NONE]");
Jiri Slaby 7a187a
-- 
Jiri Slaby 7a187a
2.35.3
Jiri Slaby 7a187a