OSDN Git Service

smb3: add tracepoints for query dir
authorSteve French <stfrench@microsoft.com>
Mon, 25 Feb 2019 19:51:11 +0000 (13:51 -0600)
committerSteve French <stfrench@microsoft.com>
Wed, 6 Mar 2019 00:10:04 +0000 (18:10 -0600)
Adds two tracepoints - one for query_dir done (no err) and one for query_dir_err

Sanple output:

To start the trace in one window:
       trace-cmd record -e smb3_query_dir*

Then in another window after doing an
       ls /mnt

View the trace output by:

        trace-cmd show

Sample output:

           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
              | |       |   ||||       |         |
             ls-24869 [007] .... 90695.452009: smb3_query_dir_done: xid=7 sid=0x5027d24d tid=0xb95cf25a fid=0xc41a8c3e offset=0x0 len=0x16
             ls-24869 [000] .... 90695.452764: smb3_query_dir_done: xid=8 sid=0x5027d24d tid=0xb95cf25a fid=0xc41a8c3e offset=0x0 len=0x0
             ls-24874 [003] .... 90701.506342: smb3_query_dir_done: xid=11 sid=0x5027d24d tid=0xb95cf25a fid=0x33ad3601 offset=0x0 len=0x8
             ls-24874 [003] .... 90701.506917: smb3_query_dir_done: xid=12 sid=0x5027d24d tid=0xb95cf25a fid=0x33ad3601 offset=0x0 len=0x0

Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/smb2pdu.c
fs/cifs/trace.h

index 64e1726..965c4c7 100644 (file)
@@ -3857,18 +3857,26 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,
        if (rc) {
                if (rc == -ENODATA &&
                    rsp->sync_hdr.Status == STATUS_NO_MORE_FILES) {
+                       trace_smb3_query_dir_done(xid, persistent_fid,
+                               tcon->tid, tcon->ses->Suid, index, 0);
                        srch_inf->endOfSearch = true;
                        rc = 0;
-               } else
+               } else {
+                       trace_smb3_query_dir_err(xid, persistent_fid, tcon->tid,
+                               tcon->ses->Suid, index, 0, rc);
                        cifs_stats_fail_inc(tcon, SMB2_QUERY_DIRECTORY_HE);
+               }
                goto qdir_exit;
        }
 
        rc = smb2_validate_iov(le16_to_cpu(rsp->OutputBufferOffset),
                               le32_to_cpu(rsp->OutputBufferLength), &rsp_iov,
                               info_buf_size);
-       if (rc)
+       if (rc) {
+               trace_smb3_query_dir_err(xid, persistent_fid, tcon->tid,
+                       tcon->ses->Suid, index, 0, rc);
                goto qdir_exit;
+       }
 
        srch_inf->unicode = true;
 
@@ -3896,6 +3904,8 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,
        else
                cifs_dbg(VFS, "illegal search buffer type\n");
 
+       trace_smb3_query_dir_done(xid, persistent_fid, tcon->tid,
+                       tcon->ses->Suid, index, srch_inf->entries_in_buffer);
        return rc;
 
 qdir_exit:
index 59be482..bf4f43f 100644 (file)
@@ -58,6 +58,7 @@ DEFINE_EVENT(smb3_rw_err_class, smb3_##name,    \
 
 DEFINE_SMB3_RW_ERR_EVENT(write_err);
 DEFINE_SMB3_RW_ERR_EVENT(read_err);
+DEFINE_SMB3_RW_ERR_EVENT(query_dir_err);
 
 
 /* For logging successful read or write */
@@ -102,6 +103,7 @@ DEFINE_EVENT(smb3_rw_done_class, smb3_##name,   \
 
 DEFINE_SMB3_RW_DONE_EVENT(write_done);
 DEFINE_SMB3_RW_DONE_EVENT(read_done);
+DEFINE_SMB3_RW_DONE_EVENT(query_dir_done);
 
 /*
  * For handle based calls other than read and write, and get/set info