include/linux/nfslocalio.h

Source file repositories/reference/linux-study-clean/include/linux/nfslocalio.h

File Facts

System
Linux kernel
Corpus path
include/linux/nfslocalio.h
Extension
.h
Size
3575 bytes
Lines
124
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.

Dependency Surface

Detected Declarations

Annotated Snippet

struct nfsd_localio_operations {
	bool (*nfsd_net_try_get)(struct net *);
	void (*nfsd_net_put)(struct net *);
	struct nfsd_file *(*nfsd_open_local_fh)(struct net *,
						struct auth_domain *,
						struct rpc_clnt *,
						const struct cred *,
						const struct nfs_fh *,
						struct nfsd_file __rcu **pnf,
						const fmode_t);
	struct net *(*nfsd_file_put_local)(struct nfsd_file __rcu **);
	struct file *(*nfsd_file_file)(struct nfsd_file *);
	void (*nfsd_file_dio_alignment)(struct nfsd_file *,
					u32 *, u32 *, u32 *);
} ____cacheline_aligned;

extern void nfsd_localio_ops_init(void);
extern const struct nfsd_localio_operations *nfs_to;

struct nfsd_file *nfs_open_local_fh(nfs_uuid_t *,
		   struct rpc_clnt *, const struct cred *,
		   const struct nfs_fh *, struct nfs_file_localio *,
		   struct nfsd_file __rcu **pnf,
		   const fmode_t);

static inline void nfs_to_nfsd_net_put(struct net *net)
{
	/*
	 * Once reference to net (and associated nfsd_serv) is dropped, NFSD
	 * could be unloaded, so ensure safe return from nfsd_net_put() by
	 * always taking RCU.
	 */
	rcu_read_lock();
	nfs_to->nfsd_net_put(net);
	rcu_read_unlock();
}

static inline void nfs_to_nfsd_file_put_local(struct nfsd_file __rcu **localio)
{
	/*
	 * Either *localio must be guaranteed to be non-NULL, or caller
	 * must prevent nfsd shutdown from completing as nfs_close_local_fh()
	 * does by blocking the nfs_uuid from being finally put.
	 */
	struct net *net;

	net = nfs_to->nfsd_file_put_local(localio);

	if (net)
		nfs_to_nfsd_net_put(net);
}

#else   /* CONFIG_NFS_LOCALIO */

struct nfs_file_localio;
static inline void nfs_close_local_fh(struct nfs_file_localio *nfl)
{
}
static inline void nfsd_localio_ops_init(void)
{
}
struct nfs_client;
static inline void nfs_localio_disable_client(struct nfs_client *clp)
{
}

#endif  /* CONFIG_NFS_LOCALIO */

#endif  /* __LINUX_NFSLOCALIO_H */

Annotation

Implementation Notes