Blame view

fs/nfs/callback.h 5.25 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
  /*
   * 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
778be232a   Andy Adamson   NFS do not find c...
10
  #include <linux/sunrpc/svc.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
12
13
14
15
16
17
18
19
20
21
22
23
  
  #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,
45377b94e   Benny Halevy   nfs41: callback n...
24
25
26
27
28
29
30
31
32
33
  /* 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,
34bc47c94   Benny Halevy   nfs41: consider m...
34
  	OP_CB_NOTIFY_DEVICEID = 14,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35
36
  	OP_CB_ILLEGAL = 10044,
  };
c36fca52f   Andy Adamson   NFS refactor nfs_...
37
38
39
  struct cb_process_state {
  	__be32			drc_status;
  	struct nfs_client	*clp;
55a673990   Trond Myklebust   NFSv4.1: Fix the ...
40
  	int			slotid;
c36fca52f   Andy Adamson   NFS refactor nfs_...
41
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
42
  struct cb_compound_hdr_arg {
2e42c3e2a   Trond Myklebust   NFS: Fix more spa...
43
  	unsigned int taglen;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
44
  	const char *tag;
b8f2ef84b   Benny Halevy   nfs41: store mino...
45
  	unsigned int minorversion;
c36fca52f   Andy Adamson   NFS refactor nfs_...
46
  	unsigned int cb_ident; /* v4.0 callback identifier */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
47
48
49
50
  	unsigned nops;
  };
  
  struct cb_compound_hdr_res {
5704fdeb4   Al Viro   [PATCH] xdr annot...
51
  	__be32 *status;
2e42c3e2a   Trond Myklebust   NFS: Fix more spa...
52
  	unsigned int taglen;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
53
  	const char *tag;
5704fdeb4   Al Viro   [PATCH] xdr annot...
54
  	__be32 *nops;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
55
56
57
  };
  
  struct cb_getattrargs {
671beed7e   Chuck Lever   NFS: Change cb_ge...
58
  	struct sockaddr *addr;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
59
60
61
62
63
  	struct nfs_fh fh;
  	uint32_t bitmap[2];
  };
  
  struct cb_getattrres {
e6f684f64   Al Viro   [PATCH] fs/nfs/ca...
64
  	__be32 status;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
65
66
67
68
69
70
71
72
  	uint32_t bitmap[2];
  	uint64_t size;
  	uint64_t change_attr;
  	struct timespec ctime;
  	struct timespec mtime;
  };
  
  struct cb_recallargs {
c1d358665   Chuck Lever   NFS: Change cb_re...
73
  	struct sockaddr *addr;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
74
75
76
77
  	struct nfs_fh fh;
  	nfs4_stateid stateid;
  	uint32_t truncate;
  };
2d9b9ec34   Benny Halevy   nfs41: cb_sequenc...
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  #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 {
65fc64e54   Ricardo Labiaga   nfs41: Backchanne...
92
  	struct sockaddr			*csa_addr;
2d9b9ec34   Benny Halevy   nfs41: cb_sequenc...
93
94
95
96
97
98
99
100
101
102
  	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 {
65fc64e54   Ricardo Labiaga   nfs41: Backchanne...
103
  	__be32				csr_status;
2d9b9ec34   Benny Halevy   nfs41: cb_sequenc...
104
105
106
107
108
109
  	struct nfs4_sessionid		csr_sessionid;
  	uint32_t			csr_sequenceid;
  	uint32_t			csr_slotid;
  	uint32_t			csr_highestslotid;
  	uint32_t			csr_target_highestslotid;
  };
c36fca52f   Andy Adamson   NFS refactor nfs_...
110
111
112
  extern __be32 nfs4_callback_sequence(struct cb_sequenceargs *args,
  				       struct cb_sequenceres *res,
  				       struct cb_process_state *cps);
d49433e1e   Benny Halevy   nfs41: cb_sequenc...
113

2597641de   Alexandros Batsakis   nfs41: v2 fix cb_...
114
115
  extern int nfs41_validate_delegation_stateid(struct nfs_delegation *delegation,
  					     const nfs4_stateid *stateid);
31f096077   Alexandros Batsakis   nfs41: V2 initial...
116
117
118
  
  #define RCA4_TYPE_MASK_RDATA_DLG	0
  #define RCA4_TYPE_MASK_WDATA_DLG	1
368403708   Alexandros Batsakis   pnfs: update nfs4...
119
120
121
122
123
124
125
126
  #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
31f096077   Alexandros Batsakis   nfs41: V2 initial...
127
128
129
130
131
132
  
  struct cb_recallanyargs {
  	struct sockaddr	*craa_addr;
  	uint32_t	craa_objs_to_keep;
  	uint32_t	craa_type_mask;
  };
c36fca52f   Andy Adamson   NFS refactor nfs_...
133
134
135
  extern __be32 nfs4_callback_recallany(struct cb_recallanyargs *args,
  					void *dummy,
  					struct cb_process_state *cps);
b9efa1b27   Andy Adamson   nfs41: implement ...
136
137
138
139
140
  
  struct cb_recallslotargs {
  	struct sockaddr	*crsa_addr;
  	uint32_t	crsa_target_max_slots;
  };
c36fca52f   Andy Adamson   NFS refactor nfs_...
141
142
143
  extern __be32 nfs4_callback_recallslot(struct cb_recallslotargs *args,
  					 void *dummy,
  					 struct cb_process_state *cps);
b9efa1b27   Andy Adamson   nfs41: implement ...
144

f2a625616   Fred Isaman   pnfs: CB_LAYOUTRE...
145
146
147
148
149
150
151
152
153
154
155
156
157
158
  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;
  	};
  };
0e0243dc3   Dan Carpenter   NFS: add an endia...
159
  extern __be32 nfs4_callback_layoutrecall(
f2a625616   Fred Isaman   pnfs: CB_LAYOUTRE...
160
161
  	struct cb_layoutrecallargs *args,
  	void *dummy, struct cb_process_state *cps);
42acd0218   Andy Adamson   NFS add session b...
162
  extern void nfs4_check_drain_bc_complete(struct nfs4_session *ses);
1be5683b0   Marc Eshel   pnfs: CB_NOTIFY_D...
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
  
  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 {
  	int				 ndevs;
  	struct cb_devicenotifyitem	 *devs;
  };
  
  extern __be32 nfs4_callback_devicenotify(
  	struct cb_devicenotifyargs *args,
  	void *dummy, struct cb_process_state *cps);
2d9b9ec34   Benny Halevy   nfs41: cb_sequenc...
179
  #endif /* CONFIG_NFS_V4_1 */
778be232a   Andy Adamson   NFS do not find c...
180
  extern int check_gss_callback_principal(struct nfs_client *, struct svc_rqst *);
c36fca52f   Andy Adamson   NFS refactor nfs_...
181
182
183
184
185
  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);
5ae1fbce1   David Howells   NFS: Fix NFS4 cal...
186
  #ifdef CONFIG_NFS_V4
714685137   Benny Halevy   nfs41: minorversi...
187
  extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt);
e82dc22da   Andy Adamson   nfs41: Allow NFSv...
188
  extern void nfs_callback_down(int minorversion);
2597641de   Alexandros Batsakis   nfs41: v2 fix cb_...
189
190
  extern int nfs4_validate_delegation_stateid(struct nfs_delegation *delegation,
  					    const nfs4_stateid *stateid);
2c2618c6f   Andy Adamson   NFS associate ses...
191
  extern int nfs4_set_callback_sessionid(struct nfs_client *clp);
e82dc22da   Andy Adamson   nfs41: Allow NFSv...
192
  #endif /* CONFIG_NFS_V4 */
a43cde94f   Ricardo Labiaga   nfs41: Implement ...
193
194
195
196
197
198
  /*
   * 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
d49433e1e   Benny Halevy   nfs41: cb_sequenc...
199
  #define NFS41_BC_MAX_CALLBACKS 1
a43cde94f   Ricardo Labiaga   nfs41: Implement ...
200

a72b44222   Trond Myklebust   NFSv4: Allow user...
201
  extern unsigned int nfs_callback_set_tcpport;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
202
  extern unsigned short nfs_callback_tcpport;
f738f5170   Chuck Lever   NFS: Start PF_INE...
203
  extern unsigned short nfs_callback_tcpport6;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
204
205
  
  #endif /* __LINUX_FS_NFS_CALLBACK_H */