[LTP] [PATCH v5 3/3] nfs: make the rpc_stat per net namespace

Petr Vorel pvorel@suse.cz
Thu Jun 20 13:22:45 CEST 2024


From: Josef Bacik <josef@toxicpanda.com>

> Now that we're exposing the rpc stats on a per-network namespace basis,
> move this struct into struct nfs_net and use that to make sure only the
> per-network namespace stats are exposed.

Hi Josef, all,

I suppose this or previous commit caused global /proc/net/rpc/nfs does not have
rpc statistics. Therefore I send a patch [1] [2] to update LTP test when running
on LTP namespaces. Hope the change was intentional, please let us know if not.

Kind regards,
Petr

[1] https://lore.kernel.org/ltp/20240620111129.594449-1-pvorel@suse.cz/
[2] https://patchwork.ozlabs.org/project/ltp/patch/20240620111129.594449-1-pvorel@suse.cz/

> Signed-off-by: Josef Bacik <josef@toxicpanda.com>
> ---
>  fs/nfs/client.c   | 5 ++++-
>  fs/nfs/inode.c    | 4 +++-
>  fs/nfs/internal.h | 2 --
>  fs/nfs/netns.h    | 2 ++
>  4 files changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/nfs/client.c b/fs/nfs/client.c
> index 44eca51b2808..4d9249c99989 100644
> --- a/fs/nfs/client.c
> +++ b/fs/nfs/client.c
> @@ -73,7 +73,6 @@ const struct rpc_program nfs_program = {
>  	.number			= NFS_PROGRAM,
>  	.nrvers			= ARRAY_SIZE(nfs_version),
>  	.version		= nfs_version,
> -	.stats			= &nfs_rpcstat,
>  	.pipe_dir_name		= NFS_PIPE_DIRNAME,
>  };
>  
> @@ -502,6 +501,7 @@ int nfs_create_rpc_client(struct nfs_client *clp,
>  			  const struct nfs_client_initdata *cl_init,
>  			  rpc_authflavor_t flavor)
>  {
> +	struct nfs_net		*nn = net_generic(clp->cl_net, nfs_net_id);
>  	struct rpc_clnt		*clnt = NULL;
>  	struct rpc_create_args args = {
>  		.net		= clp->cl_net,
> @@ -513,6 +513,7 @@ int nfs_create_rpc_client(struct nfs_client *clp,
>  		.servername	= clp->cl_hostname,
>  		.nodename	= cl_init->nodename,
>  		.program	= &nfs_program,
> +		.stats		= &nn->rpcstats,
>  		.version	= clp->rpc_ops->version,
>  		.authflavor	= flavor,
>  		.cred		= cl_init->cred,
> @@ -1175,6 +1176,8 @@ void nfs_clients_init(struct net *net)
>  #endif
>  	spin_lock_init(&nn->nfs_client_lock);
>  	nn->boot_time = ktime_get_real();
> +	memset(&nn->rpcstats, 0, sizeof(nn->rpcstats));
> +	nn->rpcstats.program = &nfs_program;
>  
>  	nfs_netns_sysfs_setup(nn, net);
>  }
> diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
> index e11e9c34aa56..91b4d811958a 100644
> --- a/fs/nfs/inode.c
> +++ b/fs/nfs/inode.c
> @@ -2426,8 +2426,10 @@ EXPORT_SYMBOL_GPL(nfs_net_id);
>  
>  static int nfs_net_init(struct net *net)
>  {
> +	struct nfs_net *nn = net_generic(net, nfs_net_id);
> +
>  	nfs_clients_init(net);
> -	rpc_proc_register(net, &nfs_rpcstat);
> +	rpc_proc_register(net, &nn->rpcstats);
>  	return nfs_fs_proc_net_init(net);
>  }
>  
> diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
> index e3722ce6722e..06253695fe53 100644
> --- a/fs/nfs/internal.h
> +++ b/fs/nfs/internal.h
> @@ -449,8 +449,6 @@ int nfs_try_get_tree(struct fs_context *);
>  int nfs_get_tree_common(struct fs_context *);
>  void nfs_kill_super(struct super_block *);
>  
> -extern struct rpc_stat nfs_rpcstat;
> -
>  extern int __init register_nfs_fs(void);
>  extern void __exit unregister_nfs_fs(void);
>  extern bool nfs_sb_active(struct super_block *sb);
> diff --git a/fs/nfs/netns.h b/fs/nfs/netns.h
> index c8374f74dce1..a68b21603ea9 100644
> --- a/fs/nfs/netns.h
> +++ b/fs/nfs/netns.h
> @@ -9,6 +9,7 @@
>  #include <linux/nfs4.h>
>  #include <net/net_namespace.h>
>  #include <net/netns/generic.h>
> +#include <linux/sunrpc/stats.h>
>  
>  struct bl_dev_msg {
>  	int32_t status;
> @@ -34,6 +35,7 @@ struct nfs_net {
>  	struct nfs_netns_client *nfs_client;
>  	spinlock_t nfs_client_lock;
>  	ktime_t boot_time;
> +	struct rpc_stat rpcstats;
>  #ifdef CONFIG_PROC_FS
>  	struct proc_dir_entry *proc_nfsfs;
>  #endif
> -- 
> 2.43.0
> 
> 


More information about the ltp mailing list