Re: [PATCH v2] NFSD: trace export root filehandle event

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux