]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
sunrpc: pass in the sv_stats struct through svc_create_pooled
authorJosef Bacik <josef@toxicpanda.com>
Thu, 5 Sep 2024 15:30:54 +0000 (11:30 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 12 Sep 2024 09:06:45 +0000 (11:06 +0200)
[ Upstream commit f094323867668d50124886ad884b665de7319537 ]

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_pooled function 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>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
[ cel: adjusted to apply to v5.10.y ]
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/nfsd/nfssvc.c
include/linux/sunrpc/svc.h
net/sunrpc/svc.c

index 2a11804b0e45b52eb5c728fdce1f09a4f58e55cd..dde1824bc6de2e883fb4b2eba2c09b1948bc6954 100644 (file)
@@ -664,7 +664,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;
 
index 00303c636a89dfc09ca02724e30c04b427064758..5753faa8d483bb71d0862139bd0d673d1f647314 100644 (file)
@@ -484,7 +484,9 @@ void                   svc_rqst_replace_page(struct svc_rqst *rqstp,
                                         struct page *page);
 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,
+struct svc_serv *  svc_create_pooled(struct svc_program *prog,
+                                    struct svc_stat *stats,
+                                    unsigned int bufsize,
                                     int (*threadfn)(void *data));
 int               svc_set_num_threads(struct svc_serv *, struct svc_pool *, int);
 int               svc_pool_stats_open(struct svc_serv *serv, struct file *file);
index 8ee5fc21e1cefbdaa069b8a737806e78c3eed634..4212fb1c3d8877f29b47cf78f2f311f0e838070d 100644 (file)
@@ -445,8 +445,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;
@@ -458,7 +458,7 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools,
        serv->sv_name      = prog->pg_name;
        serv->sv_program   = prog;
        kref_init(&serv->sv_refcnt);
-       serv->sv_stats     = prog->pg_stats;
+       serv->sv_stats     = stats;
        if (bufsize > RPCSVC_MAXPAYLOAD)
                bufsize = RPCSVC_MAXPAYLOAD;
        serv->sv_max_payload = bufsize? bufsize : 4096;
@@ -520,26 +520,28 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools,
 struct svc_serv *svc_create(struct svc_program *prog, unsigned int bufsize,
                            int (*threadfn)(void *data))
 {
-       return __svc_create(prog, bufsize, 1, threadfn);
+       return __svc_create(prog, NULL, bufsize, 1, threadfn);
 }
 EXPORT_SYMBOL_GPL(svc_create);
 
 /**
  * svc_create_pooled - Create an RPC service with pooled threads
  * @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.
  */
 struct svc_serv *svc_create_pooled(struct svc_program *prog,
+                                  struct svc_stat *stats,
                                   unsigned int bufsize,
                                   int (*threadfn)(void *data))
 {
        struct svc_serv *serv;
        unsigned int npools = svc_pool_map_get();
 
-       serv = __svc_create(prog, bufsize, npools, threadfn);
+       serv = __svc_create(prog, stats, bufsize, npools, threadfn);
        if (!serv)
                goto out_err;
        return serv;