diff options
author | Steve French <stfrench@microsoft.com> | 2018-09-19 03:38:17 -0400 |
---|---|---|
committer | Steve French <stfrench@microsoft.com> | 2018-10-23 22:16:04 -0400 |
commit | 9e1a37dad4f3b9f1d36d9fd27021bbd67fb8c85f (patch) | |
tree | fa1d2d0a3595ad867ae86f7aaf4c244e318e10b8 | |
parent | 37e6a7057607121485099e405eb528d416a5ced4 (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.c | 10 | ||||
-rw-r--r-- | fs/cifs/cifsglob.h | 1 | ||||
-rw-r--r-- | fs/cifs/connect.c | 1 | ||||
-rw-r--r-- | fs/cifs/smb2ops.c | 2 |
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 | ||