From: Josef Bacik <josef@toxicpanda.com>
To: Chuck Lever <chuck.lever@oracle.com>
Cc: linux-nfs@vger.kernel.org, kernel-team@fb.com
Subject: Re: [PATCH v2 03/13] sunrpc: pass in the sv_stats struct through svc_create*
Date: Thu, 25 Jan 2024 16:56:47 -0500 [thread overview]
Message-ID: <20240125215647.GC1602047@perftesting> (raw)
In-Reply-To: <ZbLK4BsvReiFpCUo@tissot.1015granger.net>
On Thu, Jan 25, 2024 at 03:56:00PM -0500, Chuck Lever wrote:
> On Thu, Jan 25, 2024 at 02:53:13PM -0500, Josef Bacik wrote:
> > Since only one service actually reports the rpc stats there's not much
> > of a reason to have a pointer to it in the svc_program struct. Adjust
> > the svc_create* functions to take the sv_stats as an argument and pass
> > the struct through there as desired instead of getting it from the
> > svc_program->pg_stats.
> >
> > Signed-off-by: Josef Bacik <josef@toxicpanda.com>
> > ---
> > fs/lockd/svc.c | 2 +-
> > fs/nfs/callback.c | 2 +-
> > fs/nfsd/nfssvc.c | 3 ++-
> > include/linux/sunrpc/svc.h | 8 ++++----
> > net/sunrpc/svc.c | 17 ++++++++++-------
> > 5 files changed, 18 insertions(+), 14 deletions(-)
> >
> > diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
> > index ab8042a5b895..8fbbfc9aad69 100644
> > --- a/fs/lockd/svc.c
> > +++ b/fs/lockd/svc.c
> > @@ -337,7 +337,7 @@ static int lockd_get(void)
> > nlm_timeout = LOCKD_DFLT_TIMEO;
> > nlmsvc_timeout = nlm_timeout * HZ;
> >
> > - serv = svc_create(&nlmsvc_program, LOCKD_BUFSIZE, lockd);
> > + serv = svc_create(&nlmsvc_program, NULL, LOCKD_BUFSIZE, lockd);
> > if (!serv) {
> > printk(KERN_WARNING "lockd_up: create service failed\n");
> > return -ENOMEM;
> > diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
> > index 8adfcd4c8c1a..4d56b4e73525 100644
> > --- a/fs/nfs/callback.c
> > +++ b/fs/nfs/callback.c
> > @@ -202,7 +202,7 @@ static struct svc_serv *nfs_callback_create_svc(int minorversion)
> > if (minorversion)
> > return ERR_PTR(-ENOTSUPP);
> > #endif
> > - serv = svc_create(&nfs4_callback_program, NFS4_CALLBACK_BUFSIZE,
> > + serv = svc_create(&nfs4_callback_program, NULL, NFS4_CALLBACK_BUFSIZE,
> > threadfn);
> > if (!serv) {
> > printk(KERN_ERR "nfs_callback_create_svc: create service failed\n");
> > diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
> > index a0b117107e86..d640f893021a 100644
> > --- a/fs/nfsd/nfssvc.c
> > +++ b/fs/nfsd/nfssvc.c
> > @@ -661,7 +661,8 @@ 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_max_blksize, nfsd);
> > + serv = svc_create_pooled(&nfsd_program, &nfsd_svcstats,
> > + nfsd_max_blksize, nfsd);
> > if (serv == NULL)
> > return -ENOMEM;
> >
> > diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
> > index 67cf1c9efd80..2a1447fa5ef2 100644
> > --- a/include/linux/sunrpc/svc.h
> > +++ b/include/linux/sunrpc/svc.h
> > @@ -402,8 +402,8 @@ struct svc_procedure {
> > int svc_rpcb_setup(struct svc_serv *serv, struct net *net);
> > void svc_rpcb_cleanup(struct svc_serv *serv, struct net *net);
> > int svc_bind(struct svc_serv *serv, struct net *net);
> > -struct svc_serv *svc_create(struct svc_program *, unsigned int,
> > - int (*threadfn)(void *data));
> > +struct svc_serv *svc_create(struct svc_program *, struct svc_stat *,
> > + unsigned int, int (*threadfn)(void *data));
> > struct svc_rqst *svc_rqst_alloc(struct svc_serv *serv,
> > struct svc_pool *pool, int node);
> > bool svc_rqst_replace_page(struct svc_rqst *rqstp,
> > @@ -411,8 +411,8 @@ bool svc_rqst_replace_page(struct svc_rqst *rqstp,
> > void svc_rqst_release_pages(struct svc_rqst *rqstp);
> > void svc_rqst_free(struct svc_rqst *);
> > void svc_exit_thread(struct svc_rqst *);
> > -struct svc_serv * svc_create_pooled(struct svc_program *, unsigned int,
> > - int (*threadfn)(void *data));
> > +struct svc_serv * svc_create_pooled(struct svc_program *, struct svc_stat *,
> > + unsigned int, int (*threadfn)(void *data));
> > int svc_set_num_threads(struct svc_serv *, struct svc_pool *, int);
> > int svc_pool_stats_open(struct svc_info *si, struct file *file);
> > void svc_process(struct svc_rqst *rqstp);
> > diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
> > index d2e6f3d59218..f76ef8a3dd43 100644
> > --- a/net/sunrpc/svc.c
> > +++ b/net/sunrpc/svc.c
> > @@ -451,8 +451,8 @@ __svc_init_bc(struct svc_serv *serv)
> > * Create an RPC service
> > */
> > static struct svc_serv *
> > -__svc_create(struct svc_program *prog, unsigned int bufsize, int npools,
> > - int (*threadfn)(void *data))
> > +__svc_create(struct svc_program *prog, struct svc_stat *stats,
> > + unsigned int bufsize, int npools, int (*threadfn)(void *data))
> > {
> > struct svc_serv *serv;
> > unsigned int vers;
> > @@ -463,7 +463,7 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools,
> > return NULL;
> > serv->sv_name = prog->pg_name;
> > serv->sv_program = prog;
> > - serv->sv_stats = prog->pg_stats;
> > + serv->sv_stats = stats;
> > if (bufsize > RPCSVC_MAXPAYLOAD)
> > bufsize = RPCSVC_MAXPAYLOAD;
> > serv->sv_max_payload = bufsize? bufsize : 4096;
> > @@ -521,34 +521,37 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools,
> > /**
> > * svc_create - Create an RPC service
> > * @prog: the RPC program the new service will handle
> > + * @stats: the stats struct if desired
> > * @bufsize: maximum message size for @prog
> > * @threadfn: a function to service RPC requests for @prog
> > *
> > * Returns an instantiated struct svc_serv object or NULL.
> > */
>
> Here's the only minor quibble I have so far:
>
> svc_create's callers don't use stats, so maybe you don't need
> to add an @stats argument for this API.
>
> Fwiw, I haven't gotten all the way to the end of the series yet.
Yup you're right, I can drop this bit. Thanks,
Josef
next prev parent reply other threads:[~2024-01-25 21:56 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-25 19:53 [PATCH v2 00/13] Make nfs and nfsd stats visible in network ns Josef Bacik
2024-01-25 19:53 ` [PATCH v2 01/13] sunrpc: don't change ->sv_stats if it doesn't exist Josef Bacik
2024-01-25 19:53 ` [PATCH v2 02/13] nfs: stop setting ->pg_stats for unused stats Josef Bacik
2024-01-25 19:53 ` [PATCH v2 03/13] sunrpc: pass in the sv_stats struct through svc_create* Josef Bacik
2024-01-25 20:56 ` Chuck Lever
2024-01-25 21:56 ` Josef Bacik [this message]
2024-01-25 19:53 ` [PATCH v2 04/13] sunrpc: remove ->pg_stats from svc_program Josef Bacik
2024-01-25 19:53 ` [PATCH v2 05/13] sunrpc: add a struct rpc_stats arg to rpc_create_args Josef Bacik
2024-01-25 20:53 ` Chuck Lever
2024-01-25 21:54 ` Josef Bacik
2024-01-25 22:30 ` Jeff Layton
2024-01-26 13:49 ` Chuck Lever III
2024-01-25 19:53 ` [PATCH v2 06/13] sunrpc: use the struct net as the svc proc private Josef Bacik
2024-01-25 19:53 ` [PATCH v2 07/13] nfsd: rename NFSD_NET_* to NFSD_STATS_* Josef Bacik
2024-01-25 19:53 ` [PATCH v2 08/13] nfsd: expose /proc/net/sunrpc/nfsd in net namespaces Josef Bacik
2024-01-25 19:53 ` [PATCH v2 09/13] nfsd: make all of the nfsd stats per-network namespace Josef Bacik
2024-01-25 19:53 ` [PATCH v2 10/13] nfsd: move th_cnt into nfsd_net Josef Bacik
2024-01-25 21:01 ` Chuck Lever
2024-01-25 21:56 ` Josef Bacik
2024-01-26 13:01 ` Jeff Layton
2024-01-26 13:48 ` Chuck Lever III
2024-01-26 14:08 ` Jeff Layton
2024-01-26 14:27 ` Chuck Lever III
2024-01-26 15:03 ` Jeff Layton
2024-01-26 15:16 ` Chuck Lever III
2024-01-26 15:35 ` Jeff Layton
2024-01-25 19:53 ` [PATCH v2 11/13] nfsd: make svc_stat per-network namespace instead of global Josef Bacik
2024-01-25 19:53 ` [PATCH v2 12/13] nfs: expose /proc/net/sunrpc/nfs in net namespaces Josef Bacik
2024-01-25 19:53 ` [PATCH v2 13/13] nfs: make the rpc_stat per net namespace Josef Bacik
2024-01-26 13:12 ` [PATCH v2 00/13] Make nfs and nfsd stats visible in network ns Jeff Layton
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=20240125215647.GC1602047@perftesting \
--to=josef@toxicpanda.com \
--cc=chuck.lever@oracle.com \
--cc=kernel-team@fb.com \
--cc=linux-nfs@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