aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve French <stfrench@microsoft.com>2018-09-19 03:38:17 -0400
committerSteve French <stfrench@microsoft.com>2018-10-23 22:16:04 -0400
commit9e1a37dad4f3b9f1d36d9fd27021bbd67fb8c85f (patch)
treefa1d2d0a3595ad867ae86f7aaf4c244e318e10b8
parent37e6a7057607121485099e405eb528d416a5ced4 (diff)
smb3: track the instance of each session for debugging
Each time we reconnect to the same server, bump an instance counter (and display in /proc/fs/cifs/DebugData) to make it easier to debug. Signed-off-by: Steve French <stfrench@microsoft.com> Reviewed-by: Aurelien Aptel <aaptel@suse.com> Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
-rw-r--r--fs/cifs/cifs_debug.c10
-rw-r--r--fs/cifs/cifsglob.h1
-rw-r--r--fs/cifs/connect.c1
-rw-r--r--fs/cifs/smb2ops.c2
4 files changed, 10 insertions, 4 deletions
diff --git a/fs/cifs/cifs_debug.c b/fs/cifs/cifs_debug.c
index 06576797cf31..3ae62ec74c8d 100644
--- a/fs/cifs/cifs_debug.c
+++ b/fs/cifs/cifs_debug.c
@@ -285,7 +285,7 @@ skip_rdma:
285 if ((ses->serverDomain == NULL) || 285 if ((ses->serverDomain == NULL) ||
286 (ses->serverOS == NULL) || 286 (ses->serverOS == NULL) ||
287 (ses->serverNOS == NULL)) { 287 (ses->serverNOS == NULL)) {
288 seq_printf(m, "\n%d) Name: %s Uses: %d Capability: 0x%x\tSession Status: %d\t", 288 seq_printf(m, "\n%d) Name: %s Uses: %d Capability: 0x%x\tSession Status: %d ",
289 i, ses->serverName, ses->ses_count, 289 i, ses->serverName, ses->ses_count,
290 ses->capabilities, ses->status); 290 ses->capabilities, ses->status);
291 if (ses->session_flags & SMB2_SESSION_FLAG_IS_GUEST) 291 if (ses->session_flags & SMB2_SESSION_FLAG_IS_GUEST)
@@ -296,16 +296,18 @@ skip_rdma:
296 seq_printf(m, 296 seq_printf(m,
297 "\n%d) Name: %s Domain: %s Uses: %d OS:" 297 "\n%d) Name: %s Domain: %s Uses: %d OS:"
298 " %s\n\tNOS: %s\tCapability: 0x%x\n\tSMB" 298 " %s\n\tNOS: %s\tCapability: 0x%x\n\tSMB"
299 " session status: %d\t", 299 " session status: %d ",
300 i, ses->serverName, ses->serverDomain, 300 i, ses->serverName, ses->serverDomain,
301 ses->ses_count, ses->serverOS, ses->serverNOS, 301 ses->ses_count, ses->serverOS, ses->serverNOS,
302 ses->capabilities, ses->status); 302 ses->capabilities, ses->status);
303 } 303 }
304 if (server->rdma) 304 if (server->rdma)
305 seq_printf(m, "RDMA\n\t"); 305 seq_printf(m, "RDMA\n\t");
306 seq_printf(m, "TCP status: %d\n\tLocal Users To " 306 seq_printf(m, "TCP status: %d Instance: %d\n\tLocal Users To "
307 "Server: %d SecMode: 0x%x Req On Wire: %d", 307 "Server: %d SecMode: 0x%x Req On Wire: %d",
308 server->tcpStatus, server->srv_count, 308 server->tcpStatus,
309 server->reconnect_instance,
310 server->srv_count,
309 server->sec_mode, in_flight(server)); 311 server->sec_mode, in_flight(server));
310 312
311#ifdef CONFIG_CIFS_STATS2 313#ifdef CONFIG_CIFS_STATS2
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
index d59588e4aeb4..b2f7cbd587f9 100644
--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
@@ -654,6 +654,7 @@ struct TCP_Server_Info {
654 /* 16th byte of RFC1001 workstation name is always null */ 654 /* 16th byte of RFC1001 workstation name is always null */
655 char workstation_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL]; 655 char workstation_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
656 __u32 sequence_number; /* for signing, protected by srv_mutex */ 656 __u32 sequence_number; /* for signing, protected by srv_mutex */
657 __u32 reconnect_instance; /* incremented on each reconnect */
657 struct session_key session_key; 658 struct session_key session_key;
658 unsigned long lstrp; /* when we got last response from this server */ 659 unsigned long lstrp; /* when we got last response from this server */
659 struct cifs_secmech secmech; /* crypto sec mech functs, descriptors */ 660 struct cifs_secmech secmech; /* crypto sec mech functs, descriptors */
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index 52d71b64c0c6..106d3a85f77b 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -2396,6 +2396,7 @@ cifs_get_tcp_session(struct smb_vol *volume_info)
2396 volume_info->target_rfc1001_name, RFC1001_NAME_LEN_WITH_NULL); 2396 volume_info->target_rfc1001_name, RFC1001_NAME_LEN_WITH_NULL);
2397 tcp_ses->session_estab = false; 2397 tcp_ses->session_estab = false;
2398 tcp_ses->sequence_number = 0; 2398 tcp_ses->sequence_number = 0;
2399 tcp_ses->reconnect_instance = 0;
2399 tcp_ses->lstrp = jiffies; 2400 tcp_ses->lstrp = jiffies;
2400 spin_lock_init(&tcp_ses->req_lock); 2401 spin_lock_init(&tcp_ses->req_lock);
2401 INIT_LIST_HEAD(&tcp_ses->tcp_ses_list); 2402 INIT_LIST_HEAD(&tcp_ses->tcp_ses_list);
diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
index 11b4f397a713..41342a8dc53e 100644
--- a/fs/cifs/smb2ops.c
+++ b/fs/cifs/smb2ops.c
@@ -110,6 +110,8 @@ smb2_set_credits(struct TCP_Server_Info *server, const int val)
110{ 110{
111 spin_lock(&server->req_lock); 111 spin_lock(&server->req_lock);
112 server->credits = val; 112 server->credits = val;
113 if (val == 1)
114 server->reconnect_instance++;
113 spin_unlock(&server->req_lock); 115 spin_unlock(&server->req_lock);
114} 116}
115 117