Message ID | cover.1708026931.git.josef@toxicpanda.com (mailing list archive) |
---|---|
Headers | show |
Series | Make nfs stats visible in network NS | expand |
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 > >