Skip to content

Commit ab42f4d

Browse files
josefbacikchucklever
authored andcommitted
sunrpc: don't change ->sv_stats if it doesn't exist
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 <[email protected]> Reviewed-by: Jeff Layton <[email protected]> Signed-off-by: Chuck Lever <[email protected]>
1 parent 31e4bb8 commit ab42f4d

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

net/sunrpc/svc.c

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1375,7 +1375,8 @@ svc_process_common(struct svc_rqst *rqstp)
13751375
goto err_bad_proc;
13761376

13771377
/* Syntactic check complete */
1378-
serv->sv_stats->rpccnt++;
1378+
if (serv->sv_stats)
1379+
serv->sv_stats->rpccnt++;
13791380
trace_svc_process(rqstp, progp->pg_name);
13801381

13811382
aoffset = xdr_stream_pos(xdr);
@@ -1427,7 +1428,8 @@ svc_process_common(struct svc_rqst *rqstp)
14271428
goto close_xprt;
14281429

14291430
err_bad_rpc:
1430-
serv->sv_stats->rpcbadfmt++;
1431+
if (serv->sv_stats)
1432+
serv->sv_stats->rpcbadfmt++;
14311433
xdr_stream_encode_u32(xdr, RPC_MSG_DENIED);
14321434
xdr_stream_encode_u32(xdr, RPC_MISMATCH);
14331435
/* Only RPCv2 supported */
@@ -1438,7 +1440,8 @@ svc_process_common(struct svc_rqst *rqstp)
14381440
err_bad_auth:
14391441
dprintk("svc: authentication failed (%d)\n",
14401442
be32_to_cpu(rqstp->rq_auth_stat));
1441-
serv->sv_stats->rpcbadauth++;
1443+
if (serv->sv_stats)
1444+
serv->sv_stats->rpcbadauth++;
14421445
/* Restore write pointer to location of reply status: */
14431446
xdr_truncate_encode(xdr, XDR_UNIT * 2);
14441447
xdr_stream_encode_u32(xdr, RPC_MSG_DENIED);
@@ -1448,15 +1451,17 @@ svc_process_common(struct svc_rqst *rqstp)
14481451

14491452
err_bad_prog:
14501453
dprintk("svc: unknown program %d\n", rqstp->rq_prog);
1451-
serv->sv_stats->rpcbadfmt++;
1454+
if (serv->sv_stats)
1455+
serv->sv_stats->rpcbadfmt++;
14521456
*rqstp->rq_accept_statp = rpc_prog_unavail;
14531457
goto sendit;
14541458

14551459
err_bad_vers:
14561460
svc_printk(rqstp, "unknown version (%d for prog %d, %s)\n",
14571461
rqstp->rq_vers, rqstp->rq_prog, progp->pg_name);
14581462

1459-
serv->sv_stats->rpcbadfmt++;
1463+
if (serv->sv_stats)
1464+
serv->sv_stats->rpcbadfmt++;
14601465
*rqstp->rq_accept_statp = rpc_prog_mismatch;
14611466

14621467
/*
@@ -1470,19 +1475,22 @@ svc_process_common(struct svc_rqst *rqstp)
14701475
err_bad_proc:
14711476
svc_printk(rqstp, "unknown procedure (%d)\n", rqstp->rq_proc);
14721477

1473-
serv->sv_stats->rpcbadfmt++;
1478+
if (serv->sv_stats)
1479+
serv->sv_stats->rpcbadfmt++;
14741480
*rqstp->rq_accept_statp = rpc_proc_unavail;
14751481
goto sendit;
14761482

14771483
err_garbage_args:
14781484
svc_printk(rqstp, "failed to decode RPC header\n");
14791485

1480-
serv->sv_stats->rpcbadfmt++;
1486+
if (serv->sv_stats)
1487+
serv->sv_stats->rpcbadfmt++;
14811488
*rqstp->rq_accept_statp = rpc_garbage_args;
14821489
goto sendit;
14831490

14841491
err_system_err:
1485-
serv->sv_stats->rpcbadfmt++;
1492+
if (serv->sv_stats)
1493+
serv->sv_stats->rpcbadfmt++;
14861494
*rqstp->rq_accept_statp = rpc_system_err;
14871495
goto sendit;
14881496
}
@@ -1534,7 +1542,8 @@ void svc_process(struct svc_rqst *rqstp)
15341542
out_baddir:
15351543
svc_printk(rqstp, "bad direction 0x%08x, dropping request\n",
15361544
be32_to_cpu(*p));
1537-
rqstp->rq_server->sv_stats->rpcbadfmt++;
1545+
if (rqstp->rq_server->sv_stats)
1546+
rqstp->rq_server->sv_stats->rpcbadfmt++;
15381547
out_drop:
15391548
svc_drop(rqstp);
15401549
}

0 commit comments

Comments
 (0)