From: cel@kernel.org
To: <stable@vger.kernel.org>
Cc: <linux-nfs@vger.kernel.org>, Petr Vorel <pvorel@suse.cz>,
sherry.yang@oracle.com, calum.mackay@oracle.com,
kernel-team@fb.com, Josef Bacik <josef@toxicpanda.com>,
Jeff Layton <jlayton@kernel.org>
Subject: [PATCH 5.10.y 19/19] nfsd: make svc_stat per-network namespace instead of global
Date: Thu, 5 Sep 2024 11:31:01 -0400 [thread overview]
Message-ID: <20240905153101.59927-20-cel@kernel.org> (raw)
In-Reply-To: <20240905153101.59927-1-cel@kernel.org>
From: Josef Bacik <josef@toxicpanda.com>
[ Upstream commit 16fb9808ab2c99979f081987752abcbc5b092eac ]
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 | 4 ++++
fs/nfsd/nfsctl.c | 2 ++
fs/nfsd/nfssvc.c | 2 +-
fs/nfsd/stats.c | 10 ++++------
fs/nfsd/stats.h | 2 --
5 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h
index 55ab92326384..548422b24a7d 100644
--- a/fs/nfsd/netns.h
+++ b/fs/nfsd/netns.h
@@ -13,6 +13,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
@@ -183,6 +184,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;
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
index e7fa64834d7d..2feaa49fb9fe 100644
--- a/fs/nfsd/nfsctl.c
+++ b/fs/nfsd/nfsctl.c
@@ -1461,6 +1461,8 @@ static __net_init int nfsd_init_net(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);
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
index 3f02a9a44c6b..29eb9861684e 100644
--- a/fs/nfsd/nfssvc.c
+++ b/fs/nfsd/nfssvc.c
@@ -664,7 +664,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;
diff --git a/fs/nfsd/stats.c b/fs/nfsd/stats.c
index 6b2135bfb509..7a58dba0045c 100644
--- a/fs/nfsd/stats.c
+++ b/fs/nfsd/stats.c
@@ -27,10 +27,6 @@
#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 */
@@ -119,7 +115,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)
diff --git a/fs/nfsd/stats.h b/fs/nfsd/stats.h
index 9b22b1ae929f..14525e854cba 100644
--- a/fs/nfsd/stats.h
+++ b/fs/nfsd/stats.h
@@ -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);
--
2.45.1
prev parent reply other threads:[~2024-09-05 15:31 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-05 15:30 [PATCH 5.10.y 00/19] Backport "make svc_stat per-net instead of global" cel
2024-09-05 15:30 ` [PATCH 5.10.y 01/19] nfsd: move reply cache initialization into nfsd startup cel
2024-09-08 13:03 ` Greg KH
2024-09-05 15:30 ` [PATCH 5.10.y 02/19] nfsd: move init of percpu reply_cache_stats counters back to nfsd_init_net cel
2024-09-05 15:30 ` [PATCH 5.10.y 03/19] NFSD: Refactor nfsd_reply_cache_free_locked() cel
2024-09-05 15:30 ` [PATCH 5.10.y 04/19] NFSD: Rename nfsd_reply_cache_alloc() cel
2024-09-05 15:30 ` [PATCH 5.10.y 05/19] NFSD: Replace nfsd_prune_bucket() cel
2024-09-05 15:30 ` [PATCH 5.10.y 06/19] NFSD: Refactor the duplicate reply cache shrinker cel
2024-09-05 15:30 ` [PATCH 5.10.y 07/19] NFSD: simplify error paths in nfsd_svc() cel
2024-09-05 15:30 ` [PATCH 5.10.y 08/19] NFSD: Rewrite synopsis of nfsd_percpu_counters_init() cel
2024-09-05 15:30 ` [PATCH 5.10.y 09/19] NFSD: Fix frame size warning in svc_export_parse() cel
2024-09-05 15:30 ` [PATCH 5.10.y 10/19] sunrpc: don't change ->sv_stats if it doesn't exist cel
2024-09-05 15:30 ` [PATCH 5.10.y 11/19] nfsd: stop setting ->pg_stats for unused stats cel
2024-09-05 15:30 ` [PATCH 5.10.y 12/19] sunrpc: pass in the sv_stats struct through svc_create_pooled cel
2024-09-05 15:30 ` [PATCH 5.10.y 13/19] sunrpc: remove ->pg_stats from svc_program cel
2024-09-05 15:30 ` [PATCH 5.10.y 14/19] sunrpc: use the struct net as the svc proc private cel
2024-09-05 15:30 ` [PATCH 5.10.y 15/19] nfsd: rename NFSD_NET_* to NFSD_STATS_* cel
2024-09-05 15:30 ` [PATCH 5.10.y 16/19] nfsd: expose /proc/net/sunrpc/nfsd in net namespaces cel
2024-09-05 15:30 ` [PATCH 5.10.y 17/19] nfsd: make all of the nfsd stats per-network namespace cel
2024-09-05 15:31 ` [PATCH 5.10.y 18/19] nfsd: remove nfsd_stats, make th_cnt a global counter cel
2024-09-05 15:31 ` cel [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240905153101.59927-20-cel@kernel.org \
--to=cel@kernel.org \
--cc=calum.mackay@oracle.com \
--cc=jlayton@kernel.org \
--cc=josef@toxicpanda.com \
--cc=kernel-team@fb.com \
--cc=linux-nfs@vger.kernel.org \
--cc=pvorel@suse.cz \
--cc=sherry.yang@oracle.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).