smb3: track the instance of each session for debugging
authorSteve French <stfrench@microsoft.com>
Wed, 19 Sep 2018 07:38:17 +0000 (02:38 -0500)
committerSteve French <stfrench@microsoft.com>
Wed, 24 Oct 2018 02:16:04 +0000 (21:16 -0500)
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>
fs/cifs/cifs_debug.c
fs/cifs/cifsglob.h
fs/cifs/connect.c
fs/cifs/smb2ops.c

index 06576797cf31a8f0c38355970d3ed1d81b6bb60c..3ae62ec74c8d3eafd940e7dbde2f49cfbadfacc5 100644 (file)
@@ -285,7 +285,7 @@ skip_rdma:
                        if ((ses->serverDomain == NULL) ||
                                (ses->serverOS == NULL) ||
                                (ses->serverNOS == NULL)) {
-                               seq_printf(m, "\n%d) Name: %s Uses: %d Capability: 0x%x\tSession Status: %d\t",
+                               seq_printf(m, "\n%d) Name: %s Uses: %d Capability: 0x%x\tSession Status: %d ",
                                        i, ses->serverName, ses->ses_count,
                                        ses->capabilities, ses->status);
                                if (ses->session_flags & SMB2_SESSION_FLAG_IS_GUEST)
@@ -296,16 +296,18 @@ skip_rdma:
                                seq_printf(m,
                                    "\n%d) Name: %s  Domain: %s Uses: %d OS:"
                                    " %s\n\tNOS: %s\tCapability: 0x%x\n\tSMB"
-                                   " session status: %d\t",
+                                   " session status: %d ",
                                i, ses->serverName, ses->serverDomain,
                                ses->ses_count, ses->serverOS, ses->serverNOS,
                                ses->capabilities, ses->status);
                        }
                        if (server->rdma)
                                seq_printf(m, "RDMA\n\t");
-                       seq_printf(m, "TCP status: %d\n\tLocal Users To "
+                       seq_printf(m, "TCP status: %d Instance: %d\n\tLocal Users To "
                                   "Server: %d SecMode: 0x%x Req On Wire: %d",
-                                  server->tcpStatus, server->srv_count,
+                                  server->tcpStatus,
+                                  server->reconnect_instance,
+                                  server->srv_count,
                                   server->sec_mode, in_flight(server));
 
 #ifdef CONFIG_CIFS_STATS2
index d59588e4aeb420ae344615b515b6eac733c2084a..b2f7cbd587f985b765a58188ae9620a5019d11cd 100644 (file)
@@ -654,6 +654,7 @@ struct TCP_Server_Info {
        /* 16th byte of RFC1001 workstation name is always null */
        char workstation_RFC1001_name[RFC1001_NAME_LEN_WITH_NULL];
        __u32 sequence_number; /* for signing, protected by srv_mutex */
+       __u32 reconnect_instance; /* incremented on each reconnect */
        struct session_key session_key;
        unsigned long lstrp; /* when we got last response from this server */
        struct cifs_secmech secmech; /* crypto sec mech functs, descriptors */
index 52d71b64c0c6e5f954d408098fc78197898399c7..106d3a85f77bf646bae221ba5c6305fd66c44216 100644 (file)
@@ -2396,6 +2396,7 @@ cifs_get_tcp_session(struct smb_vol *volume_info)
                volume_info->target_rfc1001_name, RFC1001_NAME_LEN_WITH_NULL);
        tcp_ses->session_estab = false;
        tcp_ses->sequence_number = 0;
+       tcp_ses->reconnect_instance = 0;
        tcp_ses->lstrp = jiffies;
        spin_lock_init(&tcp_ses->req_lock);
        INIT_LIST_HEAD(&tcp_ses->tcp_ses_list);
index 11b4f397a7133ad6d8e02593ae426dc14d536ae4..41342a8dc53ed24732ff81dc975c0d78741fcc87 100644 (file)
@@ -110,6 +110,8 @@ smb2_set_credits(struct TCP_Server_Info *server, const int val)
 {
        spin_lock(&server->req_lock);
        server->credits = val;
+       if (val == 1)
+               server->reconnect_instance++;
        spin_unlock(&server->req_lock);
 }