Expose the netfs request debug ID and subrequest index in the
smb3_read_enter, smb3_read_done and smb3_read_err tracepoints to match the
netfs tracepoints for convenient grepping.

Also expose the xid in some tracepoints where it is now available by virtue
of being stashed in the cifs_io_subrequest struct.

In future, the write tracepoints should be able to expose this also.

Signed-off-by: David Howells <dhowe...@redhat.com>
cc: Steve French <sfre...@samba.org>
cc: Shyam Prasad N <nspmangal...@gmail.com>
cc: Rohith Surabattula <rohiths.m...@gmail.com>
cc: linux-c...@vger.kernel.org
---

 fs/cifs/smb2pdu.c |   35 ++++++++-----
 fs/cifs/trace.h   |  144 ++++++++++++++++++++++++++++++++++++++++++++++-------
 2 files changed, 147 insertions(+), 32 deletions(-)

diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
index 952f242bee55..9a828b56d95a 100644
--- a/fs/cifs/smb2pdu.c
+++ b/fs/cifs/smb2pdu.c
@@ -4041,10 +4041,12 @@ smb2_new_read_req(void **buf, unsigned int *total_len,
        req->Length = cpu_to_le32(io_parms->length);
        req->Offset = cpu_to_le64(io_parms->offset);
 
-       trace_smb3_read_enter(0 /* xid */,
-                       io_parms->persistent_fid,
-                       io_parms->tcon->tid, io_parms->tcon->ses->Suid,
-                       io_parms->offset, io_parms->length);
+       trace_smb3_read_enter(rdata ? rdata->rreq->debug_id : 0,
+                             rdata ? rdata->subreq.debug_index : 0,
+                             rdata ? rdata->xid : 0,
+                             io_parms->persistent_fid,
+                             io_parms->tcon->tid, io_parms->tcon->ses->Suid,
+                             io_parms->offset, io_parms->length);
 #ifdef CONFIG_CIFS_SMB_DIRECT
        /*
         * If we want to do a RDMA write, fill in and append
@@ -4174,12 +4176,16 @@ smb2_readv_callback(struct mid_q_entry *mid)
 #endif
        if (rdata->result && rdata->result != -ENODATA) {
                cifs_stats_fail_inc(tcon, SMB2_READ_HE);
-               trace_smb3_read_err(rdata->xid,
+               trace_smb3_read_err(rdata->rreq->debug_id,
+                                   rdata->subreq.debug_index,
+                                   rdata->xid,
                                    rdata->req->cfile->fid.persistent_fid,
                                    tcon->tid, tcon->ses->Suid, rdata->offset,
                                    rdata->bytes, rdata->result);
        } else
-               trace_smb3_read_done(0 /* xid */,
+               trace_smb3_read_done(rdata->rreq->debug_id,
+                                    rdata->subreq.debug_index,
+                                    rdata->xid,
                                     rdata->req->cfile->fid.persistent_fid,
                                     tcon->tid, tcon->ses->Suid,
                                     rdata->offset, rdata->got_bytes);
@@ -4260,7 +4266,9 @@ smb2_async_readv(struct cifs_io_subrequest *rdata)
                             &rdata->credits);
        if (rc) {
                cifs_stats_fail_inc(io_parms.tcon, SMB2_READ_HE);
-               trace_smb3_read_err(rdata->xid, io_parms.persistent_fid,
+               trace_smb3_read_err(rdata->rreq->debug_id,
+                                   rdata->subreq.debug_index,
+                                   rdata->xid, io_parms.persistent_fid,
                                    io_parms.tcon->tid,
                                    io_parms.tcon->ses->Suid,
                                    io_parms.offset, io_parms.length, rc);
@@ -4311,22 +4319,23 @@ SMB2_read(const unsigned int xid, struct cifs_io_parms 
*io_parms,
                if (rc != -ENODATA) {
                        cifs_stats_fail_inc(io_parms->tcon, SMB2_READ_HE);
                        cifs_dbg(VFS, "Send error in read = %d\n", rc);
-                       trace_smb3_read_err(xid,
+                       trace_smb3_read_err(0, 0, xid,
                                            req->PersistentFileId,
                                            io_parms->tcon->tid, ses->Suid,
                                            io_parms->offset, io_parms->length,
                                            rc);
                } else
-                       trace_smb3_read_done(xid, req->PersistentFileId, 
io_parms->tcon->tid,
+                       trace_smb3_read_done(0, 0, xid,
+                                            req->PersistentFileId, 
io_parms->tcon->tid,
                                             ses->Suid, io_parms->offset, 0);
                free_rsp_buf(resp_buftype, rsp_iov.iov_base);
                cifs_small_buf_release(req);
                return rc == -ENODATA ? 0 : rc;
        } else
-               trace_smb3_read_done(xid,
-                                   req->PersistentFileId,
-                                   io_parms->tcon->tid, ses->Suid,
-                                   io_parms->offset, io_parms->length);
+               trace_smb3_read_done(0, 0, xid,
+                                    req->PersistentFileId,
+                                    io_parms->tcon->tid, ses->Suid,
+                                    io_parms->offset, io_parms->length);
 
        cifs_small_buf_release(req);
 
diff --git a/fs/cifs/trace.h b/fs/cifs/trace.h
index 6cecf302dcfd..c85cf0971eee 100644
--- a/fs/cifs/trace.h
+++ b/fs/cifs/trace.h
@@ -21,6 +21,62 @@
 
 /* For logging errors in read or write */
 DECLARE_EVENT_CLASS(smb3_rw_err_class,
+       TP_PROTO(unsigned int rreq_debug_id,
+                unsigned int rreq_debug_index,
+                unsigned int xid,
+                __u64  fid,
+                __u32  tid,
+                __u64  sesid,
+                __u64  offset,
+                __u32  len,
+                int    rc),
+       TP_ARGS(rreq_debug_id, rreq_debug_index,
+               xid, fid, tid, sesid, offset, len, rc),
+       TP_STRUCT__entry(
+               __field(unsigned int, rreq_debug_id)
+               __field(unsigned int, rreq_debug_index)
+               __field(unsigned int, xid)
+               __field(__u64, fid)
+               __field(__u32, tid)
+               __field(__u64, sesid)
+               __field(__u64, offset)
+               __field(__u32, len)
+               __field(int, rc)
+       ),
+       TP_fast_assign(
+               __entry->rreq_debug_id = rreq_debug_id;
+               __entry->rreq_debug_index = rreq_debug_index;
+               __entry->xid = xid;
+               __entry->fid = fid;
+               __entry->tid = tid;
+               __entry->sesid = sesid;
+               __entry->offset = offset;
+               __entry->len = len;
+               __entry->rc = rc;
+       ),
+       TP_printk("\tR=%08x[%x] xid=%u sid=0x%llx tid=0x%x fid=0x%llx 
offset=0x%llx len=0x%x rc=%d",
+                 __entry->rreq_debug_id, __entry->rreq_debug_index,
+                 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
+                 __entry->offset, __entry->len, __entry->rc)
+)
+
+#define DEFINE_SMB3_RW_ERR_EVENT(name)          \
+DEFINE_EVENT(smb3_rw_err_class, smb3_##name,    \
+       TP_PROTO(unsigned int rreq_debug_id,    \
+                unsigned int rreq_debug_index,         \
+                unsigned int xid,                      \
+                __u64  fid,                            \
+                __u32  tid,                            \
+                __u64  sesid,                          \
+                __u64  offset,                         \
+                __u32  len,                            \
+                int    rc),                            \
+       TP_ARGS(rreq_debug_id, rreq_debug_index, xid, fid, tid, sesid, offset, 
len, rc))
+
+DEFINE_SMB3_RW_ERR_EVENT(read_err);
+
+/* For logging errors in other file I/O ops */
+DECLARE_EVENT_CLASS(smb3_other_err_class,
        TP_PROTO(unsigned int xid,
                __u64   fid,
                __u32   tid,
@@ -52,8 +108,8 @@ DECLARE_EVENT_CLASS(smb3_rw_err_class,
                __entry->offset, __entry->len, __entry->rc)
 )
 
-#define DEFINE_SMB3_RW_ERR_EVENT(name)          \
-DEFINE_EVENT(smb3_rw_err_class, smb3_##name,    \
+#define DEFINE_SMB3_OTHER_ERR_EVENT(name)      \
+DEFINE_EVENT(smb3_other_err_class, smb3_##name, \
        TP_PROTO(unsigned int xid,              \
                __u64   fid,                    \
                __u32   tid,                    \
@@ -63,15 +119,67 @@ DEFINE_EVENT(smb3_rw_err_class, smb3_##name,    \
                int     rc),                    \
        TP_ARGS(xid, fid, tid, sesid, offset, len, rc))
 
-DEFINE_SMB3_RW_ERR_EVENT(write_err);
-DEFINE_SMB3_RW_ERR_EVENT(read_err);
-DEFINE_SMB3_RW_ERR_EVENT(query_dir_err);
-DEFINE_SMB3_RW_ERR_EVENT(zero_err);
-DEFINE_SMB3_RW_ERR_EVENT(falloc_err);
+DEFINE_SMB3_OTHER_ERR_EVENT(write_err);
+DEFINE_SMB3_OTHER_ERR_EVENT(query_dir_err);
+DEFINE_SMB3_OTHER_ERR_EVENT(zero_err);
+DEFINE_SMB3_OTHER_ERR_EVENT(falloc_err);
 
 
 /* For logging successful read or write */
 DECLARE_EVENT_CLASS(smb3_rw_done_class,
+       TP_PROTO(unsigned int rreq_debug_id,
+                unsigned int rreq_debug_index,
+                unsigned int xid,
+                __u64  fid,
+                __u32  tid,
+                __u64  sesid,
+                __u64  offset,
+                __u32  len),
+       TP_ARGS(rreq_debug_id, rreq_debug_index,
+               xid, fid, tid, sesid, offset, len),
+       TP_STRUCT__entry(
+               __field(unsigned int, rreq_debug_id)
+               __field(unsigned int, rreq_debug_index)
+               __field(unsigned int, xid)
+               __field(__u64, fid)
+               __field(__u32, tid)
+               __field(__u64, sesid)
+               __field(__u64, offset)
+               __field(__u32, len)
+       ),
+       TP_fast_assign(
+               __entry->rreq_debug_id = rreq_debug_id;
+               __entry->rreq_debug_index = rreq_debug_index;
+               __entry->xid = xid;
+               __entry->fid = fid;
+               __entry->tid = tid;
+               __entry->sesid = sesid;
+               __entry->offset = offset;
+               __entry->len = len;
+       ),
+       TP_printk("R=%08x[%x] xid=%u sid=0x%llx tid=0x%x fid=0x%llx 
offset=0x%llx len=0x%x",
+                 __entry->rreq_debug_id, __entry->rreq_debug_index,
+                 __entry->xid, __entry->sesid, __entry->tid, __entry->fid,
+                 __entry->offset, __entry->len)
+)
+
+#define DEFINE_SMB3_RW_DONE_EVENT(name)         \
+DEFINE_EVENT(smb3_rw_done_class, smb3_##name,   \
+       TP_PROTO(unsigned int rreq_debug_id,    \
+                unsigned int rreq_debug_index, \
+                unsigned int xid,              \
+               __u64   fid,                    \
+               __u32   tid,                    \
+               __u64   sesid,                  \
+               __u64   offset,                 \
+               __u32   len),                   \
+       TP_ARGS(rreq_debug_id, rreq_debug_index, xid, fid, tid, sesid, offset, 
len))
+
+DEFINE_SMB3_RW_DONE_EVENT(read_enter);
+DEFINE_SMB3_RW_DONE_EVENT(read_done);
+
+/* For logging successful other op */
+DECLARE_EVENT_CLASS(smb3_other_done_class,
        TP_PROTO(unsigned int xid,
                __u64   fid,
                __u32   tid,
@@ -100,8 +208,8 @@ DECLARE_EVENT_CLASS(smb3_rw_done_class,
                __entry->offset, __entry->len)
 )
 
-#define DEFINE_SMB3_RW_DONE_EVENT(name)         \
-DEFINE_EVENT(smb3_rw_done_class, smb3_##name,   \
+#define DEFINE_SMB3_OTHER_DONE_EVENT(name)         \
+DEFINE_EVENT(smb3_other_done_class, smb3_##name,   \
        TP_PROTO(unsigned int xid,              \
                __u64   fid,                    \
                __u32   tid,                    \
@@ -110,16 +218,14 @@ DEFINE_EVENT(smb3_rw_done_class, smb3_##name,   \
                __u32   len),                   \
        TP_ARGS(xid, fid, tid, sesid, offset, len))
 
-DEFINE_SMB3_RW_DONE_EVENT(write_enter);
-DEFINE_SMB3_RW_DONE_EVENT(read_enter);
-DEFINE_SMB3_RW_DONE_EVENT(query_dir_enter);
-DEFINE_SMB3_RW_DONE_EVENT(zero_enter);
-DEFINE_SMB3_RW_DONE_EVENT(falloc_enter);
-DEFINE_SMB3_RW_DONE_EVENT(write_done);
-DEFINE_SMB3_RW_DONE_EVENT(read_done);
-DEFINE_SMB3_RW_DONE_EVENT(query_dir_done);
-DEFINE_SMB3_RW_DONE_EVENT(zero_done);
-DEFINE_SMB3_RW_DONE_EVENT(falloc_done);
+DEFINE_SMB3_OTHER_DONE_EVENT(write_enter);
+DEFINE_SMB3_OTHER_DONE_EVENT(query_dir_enter);
+DEFINE_SMB3_OTHER_DONE_EVENT(zero_enter);
+DEFINE_SMB3_OTHER_DONE_EVENT(falloc_enter);
+DEFINE_SMB3_OTHER_DONE_EVENT(write_done);
+DEFINE_SMB3_OTHER_DONE_EVENT(query_dir_done);
+DEFINE_SMB3_OTHER_DONE_EVENT(zero_done);
+DEFINE_SMB3_OTHER_DONE_EVENT(falloc_done);
 
 /*
  * For handle based calls other than read and write, and get/set info


--
Linux-cachefs mailing list
Linux-cachefs@redhat.com
https://listman.redhat.com/mailman/listinfo/linux-cachefs

Reply via email to