]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
smb3: add dynamic trace point for ioctls
authorSteve French <stfrench@microsoft.com>
Wed, 6 Mar 2024 07:03:59 +0000 (01:03 -0600)
committerSteve French <stfrench@microsoft.com>
Mon, 11 Mar 2024 00:36:18 +0000 (19:36 -0500)
It can be helpful in debugging to know which ioctls are called to better
correlate them with smb3 fsctls (and opens).  Add a dynamic trace point
to trace ioctls into cifs.ko

Here is sample output:

            TASK-PID     CPU#  |||||  TIMESTAMP  FUNCTION
               | |         |   |||||     |         |
 new-inotify-ioc-90418   [001] ..... 142157.397024: smb3_ioctl: xid=18 fid=0x0 ioctl cmd=0xc009cf0b
 new-inotify-ioc-90457   [007] ..... 142217.943569: smb3_ioctl: xid=22 fid=0x389bf5b6 ioctl cmd=0xc009cf0b

Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/ioctl.c
fs/smb/client/trace.h

index e2f92c21fff50205ea6f93bb25c5ee8965eda003..c012dfdba80d457e27dc51996c55309840d3f892 100644 (file)
@@ -345,6 +345,11 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg)
        xid = get_xid();
 
        cifs_dbg(FYI, "cifs ioctl 0x%x\n", command);
+       if (pSMBFile == NULL)
+               trace_smb3_ioctl(xid, 0, command);
+       else
+               trace_smb3_ioctl(xid, pSMBFile->fid.persistent_fid, command);
+
        switch (command) {
                case FS_IOC_GETFLAGS:
                        if (pSMBFile == NULL)
index ce90ae0d77f84918916083428793aa4ec07650ee..f9c1fd32d0b8c3d5cc34ad11895a8c302039cf73 100644 (file)
@@ -1032,6 +1032,38 @@ DEFINE_EVENT(smb3_ses_class, smb3_##name,  \
 
 DEFINE_SMB3_SES_EVENT(ses_not_found);
 
+DECLARE_EVENT_CLASS(smb3_ioctl_class,
+       TP_PROTO(unsigned int xid,
+               __u64   fid,
+               unsigned int command),
+       TP_ARGS(xid, fid, command),
+       TP_STRUCT__entry(
+               __field(unsigned int, xid)
+               __field(__u64, fid)
+               __field(unsigned int, command)
+       ),
+       TP_fast_assign(
+               __entry->xid = xid;
+               __entry->fid = fid;
+               __entry->command = command;
+       ),
+       TP_printk("xid=%u fid=0x%llx ioctl cmd=0x%x",
+               __entry->xid, __entry->fid, __entry->command)
+)
+
+#define DEFINE_SMB3_IOCTL_EVENT(name)        \
+DEFINE_EVENT(smb3_ioctl_class, smb3_##name,  \
+       TP_PROTO(unsigned int xid,           \
+               __u64 fid,                   \
+               unsigned int command),       \
+       TP_ARGS(xid, fid, command))
+
+DEFINE_SMB3_IOCTL_EVENT(ioctl);
+
+
+
+
+
 DECLARE_EVENT_CLASS(smb3_credit_class,
        TP_PROTO(__u64  currmid,
                __u64 conn_id,