net/sunrpc/stats.c
Source file repositories/reference/linux-study-clean/net/sunrpc/stats.c
File Facts
- System
- Linux kernel
- Corpus path
net/sunrpc/stats.c- Extension
.c- Size
- 8871 bytes
- Lines
- 349
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/module.hlinux/slab.hlinux/init.hlinux/kernel.hlinux/proc_fs.hlinux/seq_file.hlinux/sunrpc/clnt.hlinux/sunrpc/svcsock.hlinux/sunrpc/metrics.hlinux/rcupdate.htrace/events/sunrpc.hnetns.h
Detected Declarations
function Copyrightfunction rpc_proc_openfunction svc_seq_showfunction rpc_free_iostatsfunction rpc_count_iostats_metricsfunction rpc_count_iostatsfunction _print_namefunction _add_rpc_iostatsfunction _print_rpc_iostatsfunction do_print_statsfunction rpc_clnt_show_statsfunction do_registerfunction rpc_proc_registerfunction rpc_proc_unregisterfunction svc_proc_registerfunction svc_proc_unregisterfunction rpc_proc_initfunction rpc_proc_exitexport svc_seq_showexport rpc_alloc_iostatsexport rpc_free_iostatsexport rpc_count_iostats_metricsexport rpc_count_iostatsexport rpc_clnt_show_statsexport rpc_proc_registerexport rpc_proc_unregisterexport svc_proc_registerexport svc_proc_unregister
Annotated Snippet
static int rpc_proc_show(struct seq_file *seq, void *v) {
const struct rpc_stat *statp = seq->private;
const struct rpc_program *prog = statp->program;
unsigned int i, j;
seq_printf(seq,
"net %u %u %u %u\n",
statp->netcnt,
statp->netudpcnt,
statp->nettcpcnt,
statp->nettcpconn);
seq_printf(seq,
"rpc %u %u %u\n",
statp->rpccnt,
statp->rpcretrans,
statp->rpcauthrefresh);
for (i = 0; i < prog->nrvers; i++) {
const struct rpc_version *vers = prog->version[i];
if (!vers)
continue;
seq_printf(seq, "proc%u %u",
vers->number, vers->nrprocs);
for (j = 0; j < vers->nrprocs; j++)
seq_printf(seq, " %u", vers->counts[j]);
seq_putc(seq, '\n');
}
return 0;
}
static int rpc_proc_open(struct inode *inode, struct file *file)
{
return single_open(file, rpc_proc_show, pde_data(inode));
}
static const struct proc_ops rpc_proc_ops = {
.proc_open = rpc_proc_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = single_release,
};
/*
* Get RPC server stats
*/
void svc_seq_show(struct seq_file *seq, const struct svc_stat *statp)
{
const struct svc_program *prog = statp->program;
const struct svc_version *vers;
unsigned int i, j, k;
unsigned long count;
seq_printf(seq,
"net %u %u %u %u\n",
statp->netcnt,
statp->netudpcnt,
statp->nettcpcnt,
statp->nettcpconn);
seq_printf(seq,
"rpc %u %u %u %u %u\n",
statp->rpccnt,
statp->rpcbadfmt+statp->rpcbadauth+statp->rpcbadclnt,
statp->rpcbadfmt,
statp->rpcbadauth,
statp->rpcbadclnt);
for (i = 0; i < prog->pg_nvers; i++) {
vers = prog->pg_vers[i];
if (!vers)
continue;
seq_printf(seq, "proc%d %u", i, vers->vs_nproc);
for (j = 0; j < vers->vs_nproc; j++) {
count = 0;
for_each_possible_cpu(k)
count += per_cpu(vers->vs_count[j], k);
seq_printf(seq, " %lu", count);
}
seq_putc(seq, '\n');
}
}
EXPORT_SYMBOL_GPL(svc_seq_show);
/**
* rpc_alloc_iostats - allocate an rpc_iostats structure
* @clnt: RPC program, version, and xprt
*
*/
struct rpc_iostats *rpc_alloc_iostats(struct rpc_clnt *clnt)
{
struct rpc_iostats *stats;
Annotation
- Immediate include surface: `linux/module.h`, `linux/slab.h`, `linux/init.h`, `linux/kernel.h`, `linux/proc_fs.h`, `linux/seq_file.h`, `linux/sunrpc/clnt.h`, `linux/sunrpc/svcsock.h`.
- Detected declarations: `function Copyright`, `function rpc_proc_open`, `function svc_seq_show`, `function rpc_free_iostats`, `function rpc_count_iostats_metrics`, `function rpc_count_iostats`, `function _print_name`, `function _add_rpc_iostats`, `function _print_rpc_iostats`, `function do_print_stats`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: integration implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.