Add a tracepoint for obtaining root filehandle event 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