include/linux/sunrpc/clnt.h
Source file repositories/reference/linux-study-clean/include/linux/sunrpc/clnt.h
File Facts
- System
- Linux kernel
- Corpus path
include/linux/sunrpc/clnt.h- Extension
.h- Size
- 9390 bytes
- Lines
- 280
- Domain
- Core OS
- Bucket
- Core Kernel Interface
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/types.hlinux/socket.hlinux/in.hlinux/in6.hlinux/refcount.hlinux/sunrpc/msg_prot.hlinux/sunrpc/sched.hlinux/sunrpc/xprt.hlinux/sunrpc/auth.hlinux/sunrpc/stats.hlinux/sunrpc/xdr.hlinux/sunrpc/timer.hlinux/sunrpc/rpc_pipe_fs.hasm/signal.hlinux/path.hnet/ipv6.hlinux/sunrpc/xprtmultipath.h
Detected Declarations
struct rpc_inodestruct rpc_sysfs_clientstruct rpc_clntstruct rpc_programstruct rpc_versionstruct rpc_procinfostruct rpc_create_argsstruct rpc_add_xprt_testfunction rpc_reply_expectedfunction rpc_task_close_connection
Annotated Snippet
struct rpc_sysfs_client {
struct kobject kobject;
struct net *net;
struct rpc_clnt *clnt;
struct rpc_xprt_switch *xprt_switch;
};
/*
* The high-level client handle
*/
struct rpc_clnt {
refcount_t cl_count; /* Number of references */
unsigned int cl_clid; /* client id */
struct list_head cl_clients; /* Global list of clients */
struct list_head cl_tasks; /* List of tasks */
atomic_t cl_pid; /* task PID counter */
spinlock_t cl_lock; /* spinlock */
struct rpc_xprt __rcu * cl_xprt; /* transport */
const struct rpc_procinfo *cl_procinfo; /* procedure info */
u32 cl_prog, /* RPC program number */
cl_vers, /* RPC version number */
cl_maxproc; /* max procedure number */
struct rpc_auth * cl_auth; /* authenticator */
struct rpc_stat * cl_stats; /* per-program statistics */
struct rpc_iostats * cl_metrics; /* per-client statistics */
unsigned int cl_softrtry : 1,/* soft timeouts */
cl_softerr : 1,/* Timeouts return errors */
cl_discrtry : 1,/* disconnect before retry */
cl_noretranstimeo: 1,/* No retransmit timeouts */
cl_autobind : 1,/* use getport() */
cl_chatty : 1,/* be verbose */
cl_shutdown : 1,/* rpc immediate -EIO */
cl_netunreach_fatal : 1;
/* Treat ENETUNREACH errors as fatal */
struct xprtsec_parms cl_xprtsec; /* transport security policy */
struct rpc_rtt * cl_rtt; /* RTO estimator data */
const struct rpc_timeout *cl_timeout; /* Timeout strategy */
atomic_t cl_swapper; /* swapfile count */
int cl_nodelen; /* nodename length */
char cl_nodename[UNX_MAXNODENAME+1];
struct rpc_pipe_dir_head cl_pipedir_objects;
struct rpc_clnt * cl_parent; /* Points to parent of clones */
struct rpc_rtt cl_rtt_default;
struct rpc_timeout cl_timeout_default;
const struct rpc_program *cl_program;
const char * cl_principal; /* use for machine cred */
#if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
struct dentry *cl_debugfs; /* debugfs directory */
#endif
struct rpc_sysfs_client *cl_sysfs; /* sysfs directory */
/* cl_work is only needed after cl_xpi is no longer used,
* and that are of similar size
*/
union {
struct rpc_xprt_iter cl_xpi;
struct work_struct cl_work;
};
const struct cred *cl_cred;
unsigned int cl_max_connect; /* max number of transports not to the same IP */
struct super_block *pipefs_sb;
atomic_t cl_task_count;
};
/*
* General RPC program info
*/
#define RPC_MAXVERSION 4
struct rpc_program {
const char * name; /* protocol name */
u32 number; /* program number */
unsigned int nrvers; /* number of versions */
const struct rpc_version ** version; /* version array */
struct rpc_stat * stats; /* statistics */
const char * pipe_dir_name; /* path to rpc_pipefs dir */
};
struct rpc_version {
u32 number; /* version number */
unsigned int nrprocs; /* number of procs */
const struct rpc_procinfo *procs; /* procedure array */
unsigned int *counts; /* call counts */
};
/*
* Procedure information
Annotation
- Immediate include surface: `linux/types.h`, `linux/socket.h`, `linux/in.h`, `linux/in6.h`, `linux/refcount.h`, `linux/sunrpc/msg_prot.h`, `linux/sunrpc/sched.h`, `linux/sunrpc/xprt.h`.
- Detected declarations: `struct rpc_inode`, `struct rpc_sysfs_client`, `struct rpc_clnt`, `struct rpc_program`, `struct rpc_version`, `struct rpc_procinfo`, `struct rpc_create_args`, `struct rpc_add_xprt_test`, `function rpc_reply_expected`, `function rpc_task_close_connection`.
- Atlas domain: Core OS / Core Kernel Interface.
- Implementation status: source 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.