]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
nfsd: make svc_stat per-network namespace instead of global
authorJosef Bacik <josef@toxicpanda.com>
Fri, 26 Jan 2024 15:39:49 +0000 (10:39 -0500)
committerChuck Lever <chuck.lever@oracle.com>
Fri, 1 Mar 2024 14:12:11 +0000 (09:12 -0500)
The final bit of stats that is global is the rpc svc_stat.  Move this
into the nfsd_net struct and use that everywhere instead of the global
struct.  Remove the unused global struct.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/netns.h
fs/nfsd/nfsctl.c
fs/nfsd/nfssvc.c
fs/nfsd/stats.c
fs/nfsd/stats.h

index 0cef4bb407a9c6176a840f32995dc4124497fe79..afc16ee4da7428a479a7d290f288c42571ac3cf9 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/nfs4.h>
 #include <linux/percpu_counter.h>
 #include <linux/siphash.h>
+#include <linux/sunrpc/stats.h>
 
 /* Hash tables for nfs4_clientid state */
 #define CLIENT_HASH_BITS                 4
@@ -179,6 +180,9 @@ struct nfsd_net {
        /* Per-netns stats counters */
        struct percpu_counter    counter[NFSD_STATS_COUNTERS_NUM];
 
+       /* sunrpc svc stats */
+       struct svc_stat          nfsd_svcstats;
+
        /* longest hash chain seen */
        unsigned int             longest_chain;
 
index ea3c8114245c28dcff43347f39dd849383491d37..5a5547bd6ecf7e5412a6ebb715bde8a2e89d8db3 100644 (file)
@@ -1674,6 +1674,8 @@ static __net_init int nfsd_net_init(struct net *net)
        retval = nfsd_stat_counters_init(nn);
        if (retval)
                goto out_repcache_error;
+       memset(&nn->nfsd_svcstats, 0, sizeof(nn->nfsd_svcstats));
+       nn->nfsd_svcstats.program = &nfsd_program;
        nn->nfsd_versions = NULL;
        nn->nfsd4_minorversions = NULL;
        nfsd4_init_leases_net(nn);
index fdb59189643044448ce2ddba89db8d3c2d27399f..c0d17b92b249f7db6f084ad005d7eefd4a595fc7 100644 (file)
@@ -661,7 +661,7 @@ int nfsd_create_serv(struct net *net)
        if (nfsd_max_blksize == 0)
                nfsd_max_blksize = nfsd_get_default_max_blksize();
        nfsd_reset_versions(nn);
-       serv = svc_create_pooled(&nfsd_program, &nfsd_svcstats,
+       serv = svc_create_pooled(&nfsd_program, &nn->nfsd_svcstats,
                                 nfsd_max_blksize, nfsd);
        if (serv == NULL)
                return -ENOMEM;
index 3a7f791c30528d2862a46d5df7f453764e376cac..be52fb1e928ed62d4ccfd680f19149faa62f0880 100644 (file)
 
 #include "nfsd.h"
 
-struct svc_stat                nfsd_svcstats = {
-       .program        = &nfsd_program,
-};
-
 static int nfsd_show(struct seq_file *seq, void *v)
 {
        struct net *net = pde_data(file_inode(seq->file));
@@ -56,7 +52,7 @@ static int nfsd_show(struct seq_file *seq, void *v)
        seq_puts(seq, "\nra 0 0 0 0 0 0 0 0 0 0 0 0\n");
 
        /* show my rpc info */
-       svc_seq_show(seq, &nfsd_svcstats);
+       svc_seq_show(seq, &nn->nfsd_svcstats);
 
 #ifdef CONFIG_NFSD_V4
        /* Show count for individual nfsv4 operations */
@@ -121,7 +117,9 @@ void nfsd_stat_counters_destroy(struct nfsd_net *nn)
 
 void nfsd_proc_stat_init(struct net *net)
 {
-       svc_proc_register(net, &nfsd_svcstats, &nfsd_proc_ops);
+       struct nfsd_net *nn = net_generic(net, nfsd_net_id);
+
+       svc_proc_register(net, &nn->nfsd_svcstats, &nfsd_proc_ops);
 }
 
 void nfsd_proc_stat_shutdown(struct net *net)
index 5675d283a53730e2cd01aec6f82ea26b26aca49c..d2753e975dfd3429aeeeac3a3d78a183024de697 100644 (file)
@@ -10,8 +10,6 @@
 #include <uapi/linux/nfsd/stats.h>
 #include <linux/percpu_counter.h>
 
-extern struct svc_stat         nfsd_svcstats;
-
 int nfsd_percpu_counters_init(struct percpu_counter *counters, int num);
 void nfsd_percpu_counters_reset(struct percpu_counter *counters, int num);
 void nfsd_percpu_counters_destroy(struct percpu_counter *counters, int num);