]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sunrpc: don't change ->sv_stats if it doesn't exist
authorJosef Bacik <josef@toxicpanda.com>
Fri, 26 Jan 2024 15:39:40 +0000 (10:39 -0500)
committerChuck Lever <chuck.lever@oracle.com>
Fri, 1 Mar 2024 14:12:07 +0000 (09:12 -0500)
We check for the existence of ->sv_stats elsewhere except in the core
processing code.  It appears that only nfsd actual exports these values
anywhere, everybody else just has a write only copy of sv_stats in their
svc_program.  Add a check for ->sv_stats before every adjustment to
allow us to eliminate the stats struct from all the users who don't
report the stats.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
net/sunrpc/svc.c

index b969e505c7b77002e17936c7ee4fa6e6c79ad223..62afc3dbc837174e583a295749eeb851a3706684 100644 (file)
@@ -1375,7 +1375,8 @@ svc_process_common(struct svc_rqst *rqstp)
                goto err_bad_proc;
 
        /* Syntactic check complete */
-       serv->sv_stats->rpccnt++;
+       if (serv->sv_stats)
+               serv->sv_stats->rpccnt++;
        trace_svc_process(rqstp, progp->pg_name);
 
        aoffset = xdr_stream_pos(xdr);
@@ -1427,7 +1428,8 @@ err_short_len:
        goto close_xprt;
 
 err_bad_rpc:
-       serv->sv_stats->rpcbadfmt++;
+       if (serv->sv_stats)
+               serv->sv_stats->rpcbadfmt++;
        xdr_stream_encode_u32(xdr, RPC_MSG_DENIED);
        xdr_stream_encode_u32(xdr, RPC_MISMATCH);
        /* Only RPCv2 supported */
@@ -1438,7 +1440,8 @@ err_bad_rpc:
 err_bad_auth:
        dprintk("svc: authentication failed (%d)\n",
                be32_to_cpu(rqstp->rq_auth_stat));
-       serv->sv_stats->rpcbadauth++;
+       if (serv->sv_stats)
+               serv->sv_stats->rpcbadauth++;
        /* Restore write pointer to location of reply status: */
        xdr_truncate_encode(xdr, XDR_UNIT * 2);
        xdr_stream_encode_u32(xdr, RPC_MSG_DENIED);
@@ -1448,7 +1451,8 @@ err_bad_auth:
 
 err_bad_prog:
        dprintk("svc: unknown program %d\n", rqstp->rq_prog);
-       serv->sv_stats->rpcbadfmt++;
+       if (serv->sv_stats)
+               serv->sv_stats->rpcbadfmt++;
        *rqstp->rq_accept_statp = rpc_prog_unavail;
        goto sendit;
 
@@ -1456,7 +1460,8 @@ err_bad_vers:
        svc_printk(rqstp, "unknown version (%d for prog %d, %s)\n",
                       rqstp->rq_vers, rqstp->rq_prog, progp->pg_name);
 
-       serv->sv_stats->rpcbadfmt++;
+       if (serv->sv_stats)
+               serv->sv_stats->rpcbadfmt++;
        *rqstp->rq_accept_statp = rpc_prog_mismatch;
 
        /*
@@ -1470,19 +1475,22 @@ err_bad_vers:
 err_bad_proc:
        svc_printk(rqstp, "unknown procedure (%d)\n", rqstp->rq_proc);
 
-       serv->sv_stats->rpcbadfmt++;
+       if (serv->sv_stats)
+               serv->sv_stats->rpcbadfmt++;
        *rqstp->rq_accept_statp = rpc_proc_unavail;
        goto sendit;
 
 err_garbage_args:
        svc_printk(rqstp, "failed to decode RPC header\n");
 
-       serv->sv_stats->rpcbadfmt++;
+       if (serv->sv_stats)
+               serv->sv_stats->rpcbadfmt++;
        *rqstp->rq_accept_statp = rpc_garbage_args;
        goto sendit;
 
 err_system_err:
-       serv->sv_stats->rpcbadfmt++;
+       if (serv->sv_stats)
+               serv->sv_stats->rpcbadfmt++;
        *rqstp->rq_accept_statp = rpc_system_err;
        goto sendit;
 }
@@ -1534,7 +1542,8 @@ void svc_process(struct svc_rqst *rqstp)
 out_baddir:
        svc_printk(rqstp, "bad direction 0x%08x, dropping request\n",
                   be32_to_cpu(*p));
-       rqstp->rq_server->sv_stats->rpcbadfmt++;
+       if (rqstp->rq_server->sv_stats)
+               rqstp->rq_server->sv_stats->rpcbadfmt++;
 out_drop:
        svc_drop(rqstp);
 }