204 lines · 4.9 KB · C
RawDownload
/* SPDX-License-Identifier: GPL-2.0 *//* * linux/fs/nfs/callback.h * * Copyright (C) 2004 Trond Myklebust * * NFSv4 callback definitions */#ifndef __LINUX_FS_NFS_CALLBACK_H#define __LINUX_FS_NFS_CALLBACK_H#include <linux/sunrpc/svc.h> #define NFS4_CALLBACK 0x40000000#define NFS4_CALLBACK_XDRSIZE 2048#define NFS4_CALLBACK_BUFSIZE (1024 + NFS4_CALLBACK_XDRSIZE) enum nfs4_callback_procnum {	CB_NULL = 0,	CB_COMPOUND = 1,}; struct nfs4_slot;struct cb_process_state {	struct nfs_client	*clp;	struct nfs4_slot	*slot;	struct net		*net;	u32			minorversion;	__be32			drc_status;	unsigned int		referring_calls;}; struct cb_compound_hdr_arg {	unsigned int taglen;	const char *tag;	unsigned int minorversion;	unsigned int cb_ident; /* v4.0 callback identifier */	unsigned nops;}; struct cb_compound_hdr_res {	__be32 *status;	unsigned int taglen;	const char *tag;	__be32 *nops;}; struct cb_getattrargs {	struct nfs_fh fh;	uint32_t bitmap[3];}; struct cb_getattrres {	__be32 status;	uint32_t bitmap[3];	uint64_t size;	uint64_t change_attr;	struct timespec64 atime;	struct timespec64 ctime;	struct timespec64 mtime;}; struct cb_recallargs {	struct nfs_fh fh;	nfs4_stateid stateid;	uint32_t truncate;}; struct referring_call {	uint32_t			rc_sequenceid;	uint32_t			rc_slotid;}; struct referring_call_list {	struct nfs4_sessionid		rcl_sessionid;	uint32_t			rcl_nrefcalls;	struct referring_call 		*rcl_refcalls;}; struct cb_sequenceargs {	struct sockaddr			*csa_addr;	struct nfs4_sessionid		csa_sessionid;	uint32_t			csa_sequenceid;	uint32_t			csa_slotid;	uint32_t			csa_highestslotid;	uint32_t			csa_cachethis;	uint32_t			csa_nrclists;	struct referring_call_list	*csa_rclists;}; struct cb_sequenceres {	__be32				csr_status;	struct nfs4_sessionid		csr_sessionid;	uint32_t			csr_sequenceid;	uint32_t			csr_slotid;	uint32_t			csr_highestslotid;	uint32_t			csr_target_highestslotid;}; extern __be32 nfs4_callback_sequence(void *argp, void *resp,				       struct cb_process_state *cps); #define RCA4_TYPE_MASK_RDATA_DLG	0#define RCA4_TYPE_MASK_WDATA_DLG	1#define RCA4_TYPE_MASK_DIR_DLG         2#define RCA4_TYPE_MASK_FILE_LAYOUT     3#define RCA4_TYPE_MASK_BLK_LAYOUT      4#define RCA4_TYPE_MASK_OBJ_LAYOUT_MIN  8#define RCA4_TYPE_MASK_OBJ_LAYOUT_MAX  9#define RCA4_TYPE_MASK_OTHER_LAYOUT_MIN 12#define RCA4_TYPE_MASK_OTHER_LAYOUT_MAX 15#define PNFS_FF_RCA4_TYPE_MASK_READ 16#define PNFS_FF_RCA4_TYPE_MASK_RW 17#define RCA4_TYPE_MASK_ALL 0x3f31f struct cb_recallanyargs {	uint32_t	craa_objs_to_keep;	uint32_t	craa_type_mask;}; extern __be32 nfs4_callback_recallany(void *argp, void *resp,					struct cb_process_state *cps); struct cb_recallslotargs {	uint32_t	crsa_target_highest_slotid;};extern __be32 nfs4_callback_recallslot(void *argp, void *resp,					 struct cb_process_state *cps); struct cb_layoutrecallargs {	uint32_t		cbl_recall_type;	uint32_t		cbl_layout_type;	uint32_t		cbl_layoutchanged;	union {		struct {			struct nfs_fh		cbl_fh;			struct pnfs_layout_range cbl_range;			nfs4_stateid		cbl_stateid;		};		struct nfs_fsid		cbl_fsid;	};}; extern __be32 nfs4_callback_layoutrecall(void *argp, void *resp,		struct cb_process_state *cps); struct cb_devicenotifyitem {	uint32_t		cbd_notify_type;	uint32_t		cbd_layout_type;	struct nfs4_deviceid	cbd_dev_id;	uint32_t		cbd_immediate;}; struct cb_devicenotifyargs {	uint32_t			 ndevs;	struct cb_devicenotifyitem	 *devs;}; extern __be32 nfs4_callback_devicenotify(void *argp, void *resp,		struct cb_process_state *cps); struct cb_notify_lock_args {	struct nfs_fh			cbnl_fh;	struct nfs_lowner		cbnl_owner;	bool				cbnl_valid;}; extern __be32 nfs4_callback_notify_lock(void *argp, void *resp,					 struct cb_process_state *cps);#ifdef CONFIG_NFS_V4_2struct cb_offloadargs {	struct nfs_fh		coa_fh;	nfs4_stateid		coa_stateid;	uint32_t		error;	uint64_t		wr_count;	struct nfs_writeverf	wr_writeverf;}; extern __be32 nfs4_callback_offload(void *args, void *dummy,				    struct cb_process_state *cps);#endif /* CONFIG_NFS_V4_2 */extern int check_gss_callback_principal(struct nfs_client *, struct svc_rqst *);extern __be32 nfs4_callback_getattr(void *argp, void *resp,				    struct cb_process_state *cps);extern __be32 nfs4_callback_recall(void *argp, void *resp,				   struct cb_process_state *cps);#if IS_ENABLED(CONFIG_NFS_V4)extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt);extern void nfs_callback_down(int minorversion, struct net *net,			      struct rpc_xprt *xprt);#endif /* CONFIG_NFS_V4 *//* * nfs41: Callbacks are expected to not cause substantial latency, * so we limit their concurrency to 1 by setting up the maximum number * of slots for the backchannel. */#define NFS41_BC_MIN_CALLBACKS 1#define NFS41_BC_MAX_CALLBACKS 1 #define NFS4_MIN_NR_CALLBACK_THREADS 1 extern unsigned int nfs_callback_set_tcpport;extern unsigned short nfs_callback_nr_threads; #endif /* __LINUX_FS_NFS_CALLBACK_H */