nfsd: make svc_stat per-network namespace instead of global

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>
This commit is contained in:
Josef Bacik 2024-01-26 10:39:49 -05:00 committed by Chuck Lever
parent e41ee44cc6
commit 16fb9808ab
5 changed files with 11 additions and 9 deletions

View File

@ -14,6 +14,7 @@
#include <linux/nfs4.h> #include <linux/nfs4.h>
#include <linux/percpu_counter.h> #include <linux/percpu_counter.h>
#include <linux/siphash.h> #include <linux/siphash.h>
#include <linux/sunrpc/stats.h>
/* Hash tables for nfs4_clientid state */ /* Hash tables for nfs4_clientid state */
#define CLIENT_HASH_BITS 4 #define CLIENT_HASH_BITS 4
@ -179,6 +180,9 @@ struct nfsd_net {
/* Per-netns stats counters */ /* Per-netns stats counters */
struct percpu_counter counter[NFSD_STATS_COUNTERS_NUM]; struct percpu_counter counter[NFSD_STATS_COUNTERS_NUM];
/* sunrpc svc stats */
struct svc_stat nfsd_svcstats;
/* longest hash chain seen */ /* longest hash chain seen */
unsigned int longest_chain; unsigned int longest_chain;

View File

@ -1674,6 +1674,8 @@ static __net_init int nfsd_net_init(struct net *net)
retval = nfsd_stat_counters_init(nn); retval = nfsd_stat_counters_init(nn);
if (retval) if (retval)
goto out_repcache_error; goto out_repcache_error;
memset(&nn->nfsd_svcstats, 0, sizeof(nn->nfsd_svcstats));
nn->nfsd_svcstats.program = &nfsd_program;
nn->nfsd_versions = NULL; nn->nfsd_versions = NULL;
nn->nfsd4_minorversions = NULL; nn->nfsd4_minorversions = NULL;
nfsd4_init_leases_net(nn); nfsd4_init_leases_net(nn);

View File

@ -661,7 +661,7 @@ int nfsd_create_serv(struct net *net)
if (nfsd_max_blksize == 0) if (nfsd_max_blksize == 0)
nfsd_max_blksize = nfsd_get_default_max_blksize(); nfsd_max_blksize = nfsd_get_default_max_blksize();
nfsd_reset_versions(nn); 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); nfsd_max_blksize, nfsd);
if (serv == NULL) if (serv == NULL)
return -ENOMEM; return -ENOMEM;

View File

@ -27,10 +27,6 @@
#include "nfsd.h" #include "nfsd.h"
struct svc_stat nfsd_svcstats = {
.program = &nfsd_program,
};
static int nfsd_show(struct seq_file *seq, void *v) static int nfsd_show(struct seq_file *seq, void *v)
{ {
struct net *net = pde_data(file_inode(seq->file)); 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"); seq_puts(seq, "\nra 0 0 0 0 0 0 0 0 0 0 0 0\n");
/* show my rpc info */ /* show my rpc info */
svc_seq_show(seq, &nfsd_svcstats); svc_seq_show(seq, &nn->nfsd_svcstats);
#ifdef CONFIG_NFSD_V4 #ifdef CONFIG_NFSD_V4
/* Show count for individual nfsv4 operations */ /* 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) 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) void nfsd_proc_stat_shutdown(struct net *net)

View File

@ -10,8 +10,6 @@
#include <uapi/linux/nfsd/stats.h> #include <uapi/linux/nfsd/stats.h>
#include <linux/percpu_counter.h> #include <linux/percpu_counter.h>
extern struct svc_stat nfsd_svcstats;
int nfsd_percpu_counters_init(struct percpu_counter *counters, int num); 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_reset(struct percpu_counter *counters, int num);
void nfsd_percpu_counters_destroy(struct percpu_counter *counters, int num); void nfsd_percpu_counters_destroy(struct percpu_counter *counters, int num);