On Fri, Mar 29, 2024 at 12:16:54AM +0800, Chen Hanxiao wrote: > Add a tracepoint for obtaining root filehandle event I've had a chance to look at this more closely. It turns out we've already got trace_nfsd_ctl_filehandle(). So let's only remove the dprintk call site in exp_rootfh(). > Signed-off-by: Chen Hanxiao <chenhx.fnst@xxxxxxxxxxx> > --- > v2: > remove dentry address record > add netns inum entry > trace ex_flags > > fs/nfsd/export.c | 4 +--- > fs/nfsd/trace.h | 41 +++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 42 insertions(+), 3 deletions(-) > > diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c > index 7b641095a665..63acd1564eab 100644 > --- a/fs/nfsd/export.c > +++ b/fs/nfsd/export.c > @@ -1027,15 +1027,13 @@ exp_rootfh(struct net *net, struct auth_domain *clp, char *name, > } > inode = d_inode(path.dentry); > > - dprintk("nfsd: exp_rootfh(%s [%p] %s:%s/%ld)\n", > - name, path.dentry, clp->name, > - inode->i_sb->s_id, inode->i_ino); > exp = exp_parent(cd, clp, &path); > if (IS_ERR(exp)) { > err = PTR_ERR(exp); > goto out; > } > > + trace_nfsd_exp_rootfh(net, name, clp->name, inode, exp); > /* > * fh must be initialized before calling fh_compose > */ > diff --git a/fs/nfsd/trace.h b/fs/nfsd/trace.h > index 1cd2076210b1..adac651e398d 100644 > --- a/fs/nfsd/trace.h > +++ b/fs/nfsd/trace.h > @@ -396,6 +396,47 @@ TRACE_EVENT(nfsd_export_update, > ) > ); > > +TRACE_EVENT(nfsd_exp_rootfh, > + TP_PROTO( > + const struct net *net, > + const char *name, > + const char *clp_name, > + const struct inode *inode, > + const struct svc_export *exp > + ), > + TP_ARGS(net, name, clp_name, inode, exp), > + TP_STRUCT__entry( > + __string(name, name) > + __field(unsigned int, netns_ino) > + __string(clp_name, clp_name) > + __string(s_id, inode->i_sb->s_id) > + __field(unsigned long, i_ino) > + __array(unsigned char, uuid, EX_UUID_LEN) > + __field(int, ex_flags) > + __field(const void *, ex_uuid) > + ), > + TP_fast_assign( > + __assign_str(name, name); > + __entry->netns_ino = net->ns.inum; > + __assign_str(clp_name, clp_name); > + __assign_str(s_id, inode->i_sb->s_id); > + __entry->i_ino = inode->i_ino; > + __entry->ex_flags = exp->ex_flags; > + __entry->ex_uuid = exp->ex_uuid; > + if (exp->ex_uuid) > + memcpy(__entry->uuid, exp->ex_uuid, EX_UUID_LEN); > + ), > + TP_printk( > + "path=%s domain=%s sid=%s/inode=%ld ex_flags=%d ex_uuid=%s", > + __get_str(name), > + __get_str(clp_name), > + __get_str(s_id), > + __entry->i_ino, > + __entry->ex_flags, > + __entry->ex_uuid ? __print_hex_str(__entry->uuid, EX_UUID_LEN) : "NULL" > + ) > +); > + > DECLARE_EVENT_CLASS(nfsd_io_class, > TP_PROTO(struct svc_rqst *rqstp, > struct svc_fh *fhp, > -- > 2.39.1 > -- Chuck Lever