smb3: add reconnect tracepoints
authorSteve French <stfrench@microsoft.com>
Tue, 31 Jul 2018 00:23:09 +0000 (19:23 -0500)
committerSteve French <stfrench@microsoft.com>
Tue, 7 Aug 2018 19:20:22 +0000 (14:20 -0500)
Add tracepoints for reconnecting an smb3 session

Example output (from trace-cmd) with the patch
(showing the session marked for reconnect, the stat failing, and then
the subsequent SMB3 commands after the server comes back up).
The "smb3_reconnect" event is the new one.

           cifsd-25993 [000] .... 29635.368265: smb3_reconnect: server=localhost current_mid=0x1e
            stat-26200 [001] .... 29638.516403: smb3_enter:  cifs_revalidate_dentry_attr: xid=22
            stat-26200 [001] .... 29648.723296: smb3_exit_err:  cifs_revalidate_dentry_attr: xid=22 rc=-112
     kworker/0:1-22830 [000] .... 29653.850947: smb3_cmd_done:  sid=0x0 tid=0x0 cmd=0 mid=0
     kworker/0:1-22830 [000] .... 29653.851191: smb3_cmd_err:  sid=0x8ae4683c tid=0x0 cmd=1 mid=1 status=0xc0000016 rc=-5
     kworker/0:1-22830 [000] .... 29653.855254: smb3_cmd_done:  sid=0x8ae4683c tid=0x0 cmd=1 mid=2
     kworker/0:1-22830 [000] .... 29653.855482: smb3_cmd_done:  sid=0x8ae4683c tid=0x8084f30d cmd=3 mid=3

Signed-off-by: Steve French <stfrench@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Reviewed-by: Aurelien Aptel <aaptel@suse.com>
fs/cifs/connect.c
fs/cifs/trace.h
fs/cifs/transport.c

index 67f91a6..d9bd10d 100644 (file)
@@ -348,6 +348,7 @@ cifs_reconnect(struct TCP_Server_Info *server)
        server->max_read = 0;
 
        cifs_dbg(FYI, "Reconnecting tcp session\n");
+       trace_smb3_reconnect(server->CurrentMid, server->hostname);
 
        /* before reconnecting the tcp session, mark the smb session (uid)
                and the tid bad so they are not used until reconnected */
index 0fdf2f5..6b50b57 100644 (file)
@@ -423,6 +423,32 @@ DEFINE_EVENT(smb3_open_done_class, smb3_##name,  \
 DEFINE_SMB3_OPEN_DONE_EVENT(open_done);
 DEFINE_SMB3_OPEN_DONE_EVENT(posix_mkdir_done);
 
+DECLARE_EVENT_CLASS(smb3_reconnect_class,
+       TP_PROTO(__u64  currmid,
+               char *hostname),
+       TP_ARGS(currmid, hostname),
+       TP_STRUCT__entry(
+               __field(__u64, currmid)
+               __field(char *, hostname)
+       ),
+       TP_fast_assign(
+               __entry->currmid = currmid;
+               __entry->hostname = hostname;
+       ),
+       TP_printk("server=%s current_mid=0x%llx",
+               __entry->hostname,
+               __entry->currmid)
+)
+
+#define DEFINE_SMB3_RECONNECT_EVENT(name)        \
+DEFINE_EVENT(smb3_reconnect_class, smb3_##name,  \
+       TP_PROTO(__u64  currmid,                \
+               char *hostname),                \
+       TP_ARGS(currmid, hostname))
+
+DEFINE_SMB3_RECONNECT_EVENT(reconnect);
+DEFINE_SMB3_RECONNECT_EVENT(partial_send_reconnect);
+
 #endif /* _CIFS_TRACE_H */
 
 #undef TRACE_INCLUDE_PATH
index 0f9156a..357d253 100644 (file)
@@ -361,6 +361,8 @@ uncork:
                 * socket so the server throws away the partial SMB
                 */
                server->tcpStatus = CifsNeedReconnect;
+               trace_smb3_partial_send_reconnect(server->CurrentMid,
+                                                 server->hostname);
        }
 smbd_done:
        if (rc < 0 && rc != -EINTR)