On Thu, Jan 25, 2024 at 02:53:20PM -0500, Josef Bacik wrote: > This is the last global stat, move it into nfsd_net and adjust all the > users to use that variant instead of the global one. Hm. I thought nfsd threads were a global resource -- they service all network namespaces. So, shouldn't the same thread count be surfaced to all containers? Won't they all see all of the nfsd processes? > Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx> > --- > fs/nfsd/netns.h | 3 +++ > fs/nfsd/nfssvc.c | 4 ++-- > fs/nfsd/stats.c | 4 ++-- > fs/nfsd/stats.h | 6 ------ > 4 files changed, 7 insertions(+), 10 deletions(-) > > diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h > index 0cef4bb407a9..8d3f4cb7cab4 100644 > --- a/fs/nfsd/netns.h > +++ b/fs/nfsd/netns.h > @@ -179,6 +179,9 @@ struct nfsd_net { > /* Per-netns stats counters */ > struct percpu_counter counter[NFSD_STATS_COUNTERS_NUM]; > > + /* number of available threads */ > + atomic_t th_cnt; > + > /* longest hash chain seen */ > unsigned int longest_chain; > > diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c > index d98a6abad990..0961b95dcef6 100644 > --- a/fs/nfsd/nfssvc.c > +++ b/fs/nfsd/nfssvc.c > @@ -924,7 +924,7 @@ nfsd(void *vrqstp) > > current->fs->umask = 0; > > - atomic_inc(&nfsdstats.th_cnt); > + atomic_inc(&nn->th_cnt); > > set_freezable(); > > @@ -940,7 +940,7 @@ nfsd(void *vrqstp) > nfsd_file_net_dispose(nn); > } > > - atomic_dec(&nfsdstats.th_cnt); > + atomic_dec(&nn->th_cnt); > > out: > /* Release the thread */ > diff --git a/fs/nfsd/stats.c b/fs/nfsd/stats.c > index 44e275324b06..360e6dbf4e5c 100644 > --- a/fs/nfsd/stats.c > +++ b/fs/nfsd/stats.c > @@ -27,7 +27,6 @@ > > #include "nfsd.h" > > -struct nfsd_stats nfsdstats; > struct svc_stat nfsd_svcstats = { > .program = &nfsd_program, > }; > @@ -47,7 +46,7 @@ static int nfsd_show(struct seq_file *seq, void *v) > percpu_counter_sum_positive(&nn->counter[NFSD_STATS_IO_WRITE])); > > /* thread usage: */ > - seq_printf(seq, "th %u 0", atomic_read(&nfsdstats.th_cnt)); > + seq_printf(seq, "th %u 0", atomic_read(&nn->th_cnt)); > > /* deprecated thread usage histogram stats */ > for (i = 0; i < 10; i++) > @@ -112,6 +111,7 @@ void nfsd_percpu_counters_destroy(struct percpu_counter counters[], int num) > > int nfsd_stat_counters_init(struct nfsd_net *nn) > { > + atomic_set(&nn->th_cnt, 0); > return nfsd_percpu_counters_init(nn->counter, NFSD_STATS_COUNTERS_NUM); > } > > diff --git a/fs/nfsd/stats.h b/fs/nfsd/stats.h > index c24be4ddbe7d..5675d283a537 100644 > --- a/fs/nfsd/stats.h > +++ b/fs/nfsd/stats.h > @@ -10,12 +10,6 @@ > #include <uapi/linux/nfsd/stats.h> > #include <linux/percpu_counter.h> > > -struct nfsd_stats { > - atomic_t th_cnt; /* number of available threads */ > -}; > - > -extern struct nfsd_stats nfsdstats; > - > extern struct svc_stat nfsd_svcstats; > > int nfsd_percpu_counters_init(struct percpu_counter *counters, int num); > -- > 2.43.0 > > -- Chuck Lever