Reviewed-by: Ronnie Sahlberg <lsahlber@xxxxxxxxxx> On Sun, Oct 28, 2018 at 4:10 PM Steve French <smfrench@xxxxxxxxx> wrote: > > In debugging certain scenarios, especially reconnect cases, > it can be helpful to have a dynamic trace point for the > result of tree connect. See sample output below > from a reconnect event. The new event is 'smb3_tcon' > > TASK-PID CPU# |||| TIMESTAMP FUNCTION > | | | |||| | | > cifsd-6071 [001] .... 2659.897923: smb3_reconnect: > server=localhost current_mid=0xa > kworker/1:1-71 [001] .... 2666.026342: smb3_cmd_done: > sid=0x0 tid=0x0 cmd=0 mid=0 > kworker/1:1-71 [001] .... 2666.026576: smb3_cmd_err: > sid=0xc49e1787 tid=0x0 cmd=1 mid=1 status=0xc0000016 rc=-5 > kworker/1:1-71 [001] .... 2666.031677: smb3_cmd_done: > sid=0xc49e1787 tid=0x0 cmd=1 mid=2 > kworker/1:1-71 [001] .... 2666.031921: smb3_cmd_done: > sid=0xc49e1787 tid=0x6e78f05f cmd=3 mid=3 > kworker/1:1-71 [001] .... 2666.031923: smb3_tcon: xid=0 > sid=0xc49e1787 tid=0x0 unc_name=\\localhost\test rc=0 > kworker/1:1-71 [001] .... 2666.032097: smb3_cmd_done: > sid=0xc49e1787 tid=0x6e78f05f cmd=11 mid=4 > kworker/1:1-71 [001] .... 2666.032265: smb3_cmd_done: > sid=0xc49e1787 tid=0x7912332f cmd=3 mid=5 > kworker/1:1-71 [001] .... 2666.032266: smb3_tcon: xid=0 > sid=0xc49e1787 tid=0x0 unc_name=\\localhost\IPC$ rc=0 > kworker/1:1-71 [001] .... 2666.032386: smb3_cmd_done: > sid=0xc49e1787 tid=0x7912332f cmd=11 mid=6 > > Signed-off-by: Steve French <stfrench@xxxxxxxxxxxxx> > --- > fs/cifs/smb2pdu.c | 3 ++- > fs/cifs/trace.h | 42 ++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 44 insertions(+), 1 deletion(-) > > diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c > index 7d7b016fe8bb..a92d3840db9d 100644 > --- a/fs/cifs/smb2pdu.c > +++ b/fs/cifs/smb2pdu.c > @@ -1512,7 +1512,7 @@ SMB2_tcon(const unsigned int xid, struct > cifs_ses *ses, const char *tree, > rc = cifs_send_recv(xid, ses, &rqst, &resp_buftype, flags, &rsp_iov); > cifs_small_buf_release(req); > rsp = (struct smb2_tree_connect_rsp *)rsp_iov.iov_base; > - > + trace_smb3_tcon(xid, tcon->tid, ses->Suid, tree, rc); > if (rc != 0) { > if (tcon) { > cifs_stats_fail_inc(tcon, SMB2_TREE_CONNECT_HE); > @@ -1559,6 +1559,7 @@ SMB2_tcon(const unsigned int xid, struct > cifs_ses *ses, const char *tree, > if (tcon->ses->server->ops->validate_negotiate) > rc = tcon->ses->server->ops->validate_negotiate(xid, tcon); > tcon_exit: > + > free_rsp_buf(resp_buftype, rsp); > kfree(unc_path); > return rc; > diff --git a/fs/cifs/trace.h b/fs/cifs/trace.h > index cce8414fe7ec..fb049809555f 100644 > --- a/fs/cifs/trace.h > +++ b/fs/cifs/trace.h > @@ -373,6 +373,48 @@ DEFINE_EVENT(smb3_enter_exit_class, smb3_##name, \ > DEFINE_SMB3_ENTER_EXIT_EVENT(enter); > DEFINE_SMB3_ENTER_EXIT_EVENT(exit_done); > > +/* > + * For SMB2/SMB3 tree connect > + */ > + > +DECLARE_EVENT_CLASS(smb3_tcon_class, > + TP_PROTO(unsigned int xid, > + __u32 tid, > + __u64 sesid, > + const char *unc_name, > + int rc), > + TP_ARGS(xid, tid, sesid, unc_name, rc), > + TP_STRUCT__entry( > + __field(unsigned int, xid) > + __field(__u32, tid) > + __field(__u64, sesid) > + __field(const char *, unc_name) > + __field(int, rc) > + ), > + TP_fast_assign( > + __entry->xid = xid; > + __entry->tid = tid; > + __entry->sesid = sesid; > + __entry->unc_name = unc_name; > + __entry->rc = rc; > + ), > + TP_printk("xid=%u sid=0x%llx tid=0x%x unc_name=%s rc=%d", > + __entry->xid, __entry->sesid, __entry->tid, > + __entry->unc_name, __entry->rc) > +) > + > +#define DEFINE_SMB3_TCON_EVENT(name) \ > +DEFINE_EVENT(smb3_tcon_class, smb3_##name, \ > + TP_PROTO(unsigned int xid, \ > + __u32 tid, \ > + __u64 sesid, \ > + const char *unc_name, \ > + int rc), \ > + TP_ARGS(xid, tid, sesid, unc_name, rc)) > + > +DEFINE_SMB3_TCON_EVENT(tcon); > + > + > /* > * For smb2/smb3 open call > */ > > -- > Thanks, > > Steve