2005-04-17 02:20:36 +04:00
/*
* 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
2011-01-25 18:38:01 +03:00
# include <linux/sunrpc/svc.h>
2005-04-17 02:20:36 +04:00
# 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 ,
} ;
enum nfs4_callback_opnum {
OP_CB_GETATTR = 3 ,
OP_CB_RECALL = 4 ,
2009-04-01 17:23:21 +04:00
/* Callback operations new to NFSv4.1 */
OP_CB_LAYOUTRECALL = 5 ,
OP_CB_NOTIFY = 6 ,
OP_CB_PUSH_DELEG = 7 ,
OP_CB_RECALL_ANY = 8 ,
OP_CB_RECALLABLE_OBJ_AVAIL = 9 ,
OP_CB_RECALL_SLOT = 10 ,
OP_CB_SEQUENCE = 11 ,
OP_CB_WANTS_CANCELLED = 12 ,
OP_CB_NOTIFY_LOCK = 13 ,
2009-04-01 17:23:22 +04:00
OP_CB_NOTIFY_DEVICEID = 14 ,
2005-04-17 02:20:36 +04:00
OP_CB_ILLEGAL = 10044 ,
} ;
2011-01-06 05:04:32 +03:00
struct cb_process_state {
__be32 drc_status ;
struct nfs_client * clp ;
} ;
2005-04-17 02:20:36 +04:00
struct cb_compound_hdr_arg {
2007-05-15 01:20:41 +04:00
unsigned int taglen ;
2005-04-17 02:20:36 +04:00
const char * tag ;
2009-04-01 17:23:19 +04:00
unsigned int minorversion ;
2011-01-06 05:04:32 +03:00
unsigned int cb_ident ; /* v4.0 callback identifier */
2005-04-17 02:20:36 +04:00
unsigned nops ;
} ;
struct cb_compound_hdr_res {
2006-10-20 10:28:51 +04:00
__be32 * status ;
2007-05-15 01:20:41 +04:00
unsigned int taglen ;
2005-04-17 02:20:36 +04:00
const char * tag ;
2006-10-20 10:28:51 +04:00
__be32 * nops ;
2005-04-17 02:20:36 +04:00
} ;
struct cb_getattrargs {
2007-12-10 22:58:22 +03:00
struct sockaddr * addr ;
2005-04-17 02:20:36 +04:00
struct nfs_fh fh ;
uint32_t bitmap [ 2 ] ;
} ;
struct cb_getattrres {
2006-10-20 10:28:50 +04:00
__be32 status ;
2005-04-17 02:20:36 +04:00
uint32_t bitmap [ 2 ] ;
uint64_t size ;
uint64_t change_attr ;
struct timespec ctime ;
struct timespec mtime ;
} ;
struct cb_recallargs {
2007-12-10 22:58:29 +03:00
struct sockaddr * addr ;
2005-04-17 02:20:36 +04:00
struct nfs_fh fh ;
nfs4_stateid stateid ;
uint32_t truncate ;
} ;
2009-04-01 17:23:24 +04:00
# if defined(CONFIG_NFS_V4_1)
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 {
2009-04-01 17:23:30 +04:00
struct sockaddr * csa_addr ;
2009-04-01 17:23:24 +04:00
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 {
2009-04-01 17:23:30 +04:00
__be32 csr_status ;
2009-04-01 17:23:24 +04:00
struct nfs4_sessionid csr_sessionid ;
uint32_t csr_sequenceid ;
uint32_t csr_slotid ;
uint32_t csr_highestslotid ;
uint32_t csr_target_highestslotid ;
} ;
2011-01-06 05:04:32 +03:00
extern __be32 nfs4_callback_sequence ( struct cb_sequenceargs * args ,
struct cb_sequenceres * res ,
struct cb_process_state * cps ) ;
2009-04-01 17:23:25 +04:00
2009-12-05 21:48:55 +03:00
extern int nfs41_validate_delegation_stateid ( struct nfs_delegation * delegation ,
const nfs4_stateid * stateid ) ;
2009-12-05 21:27:02 +03:00
# define RCA4_TYPE_MASK_RDATA_DLG 0
# define RCA4_TYPE_MASK_WDATA_DLG 1
2011-01-06 14:36:31 +03:00
# 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 RCA4_TYPE_MASK_ALL 0xf31f
2009-12-05 21:27:02 +03:00
struct cb_recallanyargs {
struct sockaddr * craa_addr ;
uint32_t craa_objs_to_keep ;
uint32_t craa_type_mask ;
} ;
2011-01-06 05:04:32 +03:00
extern __be32 nfs4_callback_recallany ( struct cb_recallanyargs * args ,
void * dummy ,
struct cb_process_state * cps ) ;
2010-01-21 00:06:27 +03:00
struct cb_recallslotargs {
struct sockaddr * crsa_addr ;
uint32_t crsa_target_max_slots ;
} ;
2011-01-06 05:04:32 +03:00
extern __be32 nfs4_callback_recallslot ( struct cb_recallslotargs * args ,
void * dummy ,
struct cb_process_state * cps ) ;
2010-01-21 00:06:27 +03:00
2011-01-06 14:36:29 +03:00
struct cb_layoutrecallargs {
struct sockaddr * cbl_addr ;
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 unsigned nfs4_callback_layoutrecall (
struct cb_layoutrecallargs * args ,
void * dummy , struct cb_process_state * cps ) ;
2011-01-06 05:04:34 +03:00
extern void nfs4_check_drain_bc_complete ( struct nfs4_session * ses ) ;
extern void nfs4_cb_take_slot ( struct nfs_client * clp ) ;
2009-04-01 17:23:24 +04:00
# endif /* CONFIG_NFS_V4_1 */
2011-01-25 18:38:01 +03:00
extern int check_gss_callback_principal ( struct nfs_client * , struct svc_rqst * ) ;
2011-01-06 05:04:32 +03:00
extern __be32 nfs4_callback_getattr ( struct cb_getattrargs * args ,
struct cb_getattrres * res ,
struct cb_process_state * cps ) ;
extern __be32 nfs4_callback_recall ( struct cb_recallargs * args , void * dummy ,
struct cb_process_state * cps ) ;
2006-08-23 04:06:08 +04:00
# ifdef CONFIG_NFS_V4
2009-04-01 17:22:56 +04:00
extern int nfs_callback_up ( u32 minorversion , struct rpc_xprt * xprt ) ;
2009-04-01 17:23:14 +04:00
extern void nfs_callback_down ( int minorversion ) ;
2009-12-05 21:48:55 +03:00
extern int nfs4_validate_delegation_stateid ( struct nfs_delegation * delegation ,
const nfs4_stateid * stateid ) ;
2011-01-06 05:04:31 +03:00
extern int nfs4_set_callback_sessionid ( struct nfs_client * clp ) ;
2009-04-01 17:23:14 +04:00
# endif /* CONFIG_NFS_V4 */
2009-04-01 17:23:08 +04:00
/*
* 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
2009-04-01 17:23:25 +04:00
# define NFS41_BC_MAX_CALLBACKS 1
2009-04-01 17:23:08 +04:00
2006-01-03 11:55:41 +03:00
extern unsigned int nfs_callback_set_tcpport ;
2005-04-17 02:20:36 +04:00
extern unsigned short nfs_callback_tcpport ;
2009-03-19 03:48:06 +03:00
extern unsigned short nfs_callback_tcpport6 ;
2005-04-17 02:20:36 +04:00
# endif /* __LINUX_FS_NFS_CALLBACK_H */