Blame view

fs/nfs/nfs4_fs.h 11.8 KB
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  /*
   * linux/fs/nfs/nfs4_fs.h
   *
   * Copyright (C) 2005 Trond Myklebust
   *
   * NFSv4-specific filesystem definitions and declarations
   */
  
  #ifndef __LINUX_FS_NFS_NFS4_FS_H
  #define __LINUX_FS_NFS_NFS4_FS_H
  
  #ifdef CONFIG_NFS_V4
  
  struct idmap;
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
15
  enum nfs4_client_state {
e005e8041   Trond Myklebust   NFSv4: Rename the...
16
  	NFS4CLNT_MANAGER_RUNNING  = 0,
e598d843c   Trond Myklebust   NFSv4: Remove red...
17
  	NFS4CLNT_CHECK_LEASE,
58d9714a4   Trond Myklebust   NFSv4: Send RENEW...
18
  	NFS4CLNT_LEASE_EXPIRED,
b79a4a1b4   Trond Myklebust   NFSv4: Fix state ...
19
20
  	NFS4CLNT_RECLAIM_REBOOT,
  	NFS4CLNT_RECLAIM_NOGRACE,
707fb4b32   Trond Myklebust   NFSv4: Clean up N...
21
  	NFS4CLNT_DELEGRETURN,
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
22
  	NFS4CLNT_LAYOUTRECALL,
6df08189f   Andy Adamson   nfs41: rename cl_...
23
  	NFS4CLNT_SESSION_RESET,
b9efa1b27   Andy Adamson   nfs41: implement ...
24
  	NFS4CLNT_RECALL_SLOT,
fd954ae12   Trond Myklebust   NFSv4.1: Don't lo...
25
  	NFS4CLNT_LEASE_CONFIRM,
78fe0f41d   Weston Andros Adamson   NFS: use scope fr...
26
  	NFS4CLNT_SERVER_SCOPE_MISMATCH,
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
27
  };
a2118c33a   Trond Myklebust   NFSv41: Don't sto...
28
  enum nfs4_session_state {
1055d76d9   Trond Myklebust   NFSv4.1: There is...
29
  	NFS4_SESSION_INITING,
a2118c33a   Trond Myklebust   NFSv41: Don't sto...
30
31
  	NFS4_SESSION_DRAINING,
  };
2f60ea6b8   Trond Myklebust   NFSv4: The NFSv4....
32
33
  #define NFS4_RENEW_TIMEOUT		0x01
  #define NFS4_RENEW_DELEGATION_CB	0x02
97dc13594   Trond Myklebust   NFSv41: Clean up ...
34
35
  struct nfs4_minor_version_ops {
  	u32	minor_version;
7c5130588   Bryan Schumaker   NFS: lookup suppo...
36
37
  	int	(*call_sync)(struct rpc_clnt *clnt,
  			struct nfs_server *server,
97dc13594   Trond Myklebust   NFSv41: Clean up ...
38
39
40
41
  			struct rpc_message *msg,
  			struct nfs4_sequence_args *args,
  			struct nfs4_sequence_res *res,
  			int cache_reply);
e047a10c1   Trond Myklebust   NFSv41: Fix nfs_a...
42
43
  	int	(*validate_stateid)(struct nfs_delegation *,
  			const nfs4_stateid *);
fca78d6d2   Bryan Schumaker   NFS: Add SECINFO_...
44
45
  	int	(*find_root_sec)(struct nfs_server *, struct nfs_fh *,
  			struct nfs_fsinfo *);
c48f4f354   Trond Myklebust   NFSv41: Convert t...
46
47
48
  	const struct nfs4_state_recovery_ops *reboot_recovery_ops;
  	const struct nfs4_state_recovery_ops *nograce_recovery_ops;
  	const struct nfs4_state_maintenance_ops *state_renewal_ops;
97dc13594   Trond Myklebust   NFSv41: Clean up ...
49
  };
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
50
  /*
cee54fc94   Trond Myklebust   NFSv4: Add functi...
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
   * struct rpc_sequence ensures that RPC calls are sent in the exact
   * order that they appear on the list.
   */
  struct rpc_sequence {
  	struct rpc_wait_queue	wait;	/* RPC call delay queue */
  	spinlock_t lock;		/* Protects the list */
  	struct list_head list;		/* Defines sequence of RPC calls */
  };
  
  #define NFS_SEQID_CONFIRMED 1
  struct nfs_seqid_counter {
  	struct rpc_sequence *sequence;
  	int flags;
  	u32 counter;
  };
  
  struct nfs_seqid {
cee54fc94   Trond Myklebust   NFSv4: Add functi...
68
  	struct nfs_seqid_counter *sequence;
4e51336a0   Trond Myklebust   NFSv4: Final twea...
69
  	struct list_head list;
cee54fc94   Trond Myklebust   NFSv4: Add functi...
70
71
72
73
74
75
76
  };
  
  static inline void nfs_confirm_seqid(struct nfs_seqid_counter *seqid, int status)
  {
  	if (seqid_mutating_err(-status))
  		seqid->flags |= NFS_SEQID_CONFIRMED;
  }
9f958ab88   Trond Myklebust   NFSv4: Reduce the...
77
78
79
80
  struct nfs_unique_id {
  	struct rb_node rb_node;
  	__u64 id;
  };
cee54fc94   Trond Myklebust   NFSv4: Add functi...
81
  /*
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
82
83
84
   * NFS4 state_owners and lock_owners are simply labels for ordered
   * sequences of RPC calls. Their sole purpose is to provide once-only
   * semantics by allowing the server to identify replayed requests.
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
85
86
   */
  struct nfs4_state_owner {
9f958ab88   Trond Myklebust   NFSv4: Reduce the...
87
  	struct nfs_unique_id so_owner_id;
6f2e64d3e   Trond Myklebust   NFSv4: Make the N...
88
  	struct nfs_server    *so_server;
0aaaf5c42   Chuck Lever   NFS: Cache state ...
89
90
  	struct list_head     so_lru;
  	unsigned long        so_expires;
24d292b89   Chuck Lever   NFS: Move cl_stat...
91
  	struct rb_node	     so_server_node;
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
92
93
  
  	struct rpc_cred	     *so_cred;	 /* Associated cred */
9f958ab88   Trond Myklebust   NFSv4: Reduce the...
94
95
96
  
  	spinlock_t	     so_lock;
  	atomic_t	     so_count;
7eff03aec   Trond Myklebust   NFSv4: Add a reco...
97
  	unsigned long	     so_flags;
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
98
  	struct list_head     so_states;
cee54fc94   Trond Myklebust   NFSv4: Add functi...
99
100
  	struct nfs_seqid_counter so_seqid;
  	struct rpc_sequence  so_sequence;
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
101
  };
7eff03aec   Trond Myklebust   NFSv4: Add a reco...
102
103
104
105
  enum {
  	NFS_OWNER_RECLAIM_REBOOT,
  	NFS_OWNER_RECLAIM_NOGRACE
  };
afe6c27cc   Alexandros Batsakis   nfs: change nfs4_...
106
107
108
  #define NFS_LOCK_NEW		0
  #define NFS_LOCK_RECLAIM	1
  #define NFS_LOCK_EXPIRED	2
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
109
110
111
112
113
114
115
116
117
118
119
  /*
   * struct nfs4_state maintains the client-side state for a given
   * (state_owner,inode) tuple (OPEN) or state_owner (LOCK).
   *
   * OPEN:
   * In order to know when to OPEN_DOWNGRADE or CLOSE the state on the server,
   * we need to know how many files are open for reading or writing on a
   * given inode. This information too is stored here.
   *
   * LOCK: one nfs4_state (LOCK) to hold the lock stateid nfs4_state(OPEN)
   */
77041ed9b   Trond Myklebust   NFSv4: Ensure the...
120
121
122
123
124
125
126
127
128
129
  struct nfs4_lock_owner {
  	unsigned int lo_type;
  #define NFS4_ANY_LOCK_TYPE	(0U)
  #define NFS4_FLOCK_LOCK_TYPE	(1U << 0)
  #define NFS4_POSIX_LOCK_TYPE	(1U << 1)
  	union {
  		fl_owner_t posix_owner;
  		pid_t flock_owner;
  	} lo_u;
  };
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
130
131
  struct nfs4_lock_state {
  	struct list_head	ls_locks;	/* Other lock stateids */
8d0a8a9d0   Trond Myklebust   [PATCH] NFSv4: Cl...
132
  	struct nfs4_state *	ls_state;	/* Pointer to open state */
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
133
134
  #define NFS_LOCK_INITIALIZED 1
  	int			ls_flags;
cee54fc94   Trond Myklebust   NFSv4: Add functi...
135
  	struct nfs_seqid_counter	ls_seqid;
d0dc3701c   Trond Myklebust   NFSv4: Give the l...
136
  	struct rpc_sequence	ls_sequence;
9f958ab88   Trond Myklebust   NFSv4: Reduce the...
137
  	struct nfs_unique_id	ls_id;
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
138
139
  	nfs4_stateid		ls_stateid;
  	atomic_t		ls_count;
77041ed9b   Trond Myklebust   NFSv4: Ensure the...
140
  	struct nfs4_lock_owner	ls_owner;
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
141
142
143
144
145
  };
  
  /* bits for nfs4_state->flags */
  enum {
  	LK_STATE_IN_USE,
003707c72   Trond Myklebust   NFSv4: Always use...
146
147
148
149
  	NFS_DELEGATED_STATE,		/* Current stateid is delegation */
  	NFS_O_RDONLY_STATE,		/* OPEN stateid has read-only state */
  	NFS_O_WRONLY_STATE,		/* OPEN stateid has write-only state */
  	NFS_O_RDWR_STATE,		/* OPEN stateid has read/write state */
b79a4a1b4   Trond Myklebust   NFSv4: Fix state ...
150
151
  	NFS_STATE_RECLAIM_REBOOT,	/* OPEN stateid server rebooted */
  	NFS_STATE_RECLAIM_NOGRACE,	/* OPEN stateid needs to recover state */
8e469ebd6   Trond Myklebust   NFSv4: Don't allo...
152
  	NFS_STATE_POSIX_LOCKS,		/* Posix locks are supported */
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
153
154
155
156
157
158
159
160
161
162
163
  };
  
  struct nfs4_state {
  	struct list_head open_states;	/* List of states for the same state_owner */
  	struct list_head inode_states;	/* List of states for the same inode */
  	struct list_head lock_states;	/* List of subservient lock stateids */
  
  	struct nfs4_state_owner *owner;	/* Pointer to the open owner */
  	struct inode *inode;		/* Pointer to the inode */
  
  	unsigned long flags;		/* Do we hold any locks? */
8d0a8a9d0   Trond Myklebust   [PATCH] NFSv4: Cl...
164
  	spinlock_t state_lock;		/* Protects the lock_states list */
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
165

8bda4e4c9   Trond Myklebust   NFSv4: Fix up sta...
166
  	seqlock_t seqlock;		/* Protects the stateid/open_stateid */
003707c72   Trond Myklebust   NFSv4: Always use...
167
168
  	nfs4_stateid stateid;		/* Current stateid: may be delegation */
  	nfs4_stateid open_stateid;	/* OPEN stateid */
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
169

8bda4e4c9   Trond Myklebust   NFSv4: Fix up sta...
170
  	/* The following 3 fields are protected by owner->so_lock */
003707c72   Trond Myklebust   NFSv4: Always use...
171
172
173
  	unsigned int n_rdonly;		/* Number of read-only references */
  	unsigned int n_wronly;		/* Number of write-only references */
  	unsigned int n_rdwr;		/* Number of read/write references */
dc0b027df   Trond Myklebust   NFSv4: Convert th...
174
  	fmode_t state;			/* State on the server (R,W, or RW) */
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
175
176
177
178
179
180
181
  	atomic_t count;
  };
  
  
  struct nfs4_exception {
  	long timeout;
  	int retry;
9e33bed55   Trond Myklebust   NFSv4: Add recove...
182
  	struct nfs4_state *state;
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
183
184
185
  };
  
  struct nfs4_state_recovery_ops {
7eff03aec   Trond Myklebust   NFSv4: Add a reco...
186
  	int owner_flag_bit;
b79a4a1b4   Trond Myklebust   NFSv4: Fix state ...
187
  	int state_flag_bit;
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
188
189
  	int (*recover_open)(struct nfs4_state_owner *, struct nfs4_state *);
  	int (*recover_lock)(struct nfs4_state *, struct file_lock *);
591d71cbd   Andy Adamson   nfs41: establish ...
190
  	int (*establish_clid)(struct nfs_client *, struct rpc_cred *);
90a16617e   Andy Adamson   nfs41: add a get_...
191
  	struct rpc_cred * (*get_clid_cred)(struct nfs_client *);
fce5c838e   Ricardo Labiaga   nfs41: RECLAIM_CO...
192
  	int (*reclaim_complete)(struct nfs_client *);
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
193
  };
29fba38b7   Benny Halevy   nfs41: lease renewal
194
  struct nfs4_state_maintenance_ops {
2f60ea6b8   Trond Myklebust   NFSv4: The NFSv4....
195
  	int (*sched_state_renewal)(struct nfs_client *, struct rpc_cred *, unsigned);
a7b721037   Andy Adamson   nfs41: introduce ...
196
  	struct rpc_cred * (*get_state_renewal_cred_locked)(struct nfs_client *);
8e69514f2   Benny Halevy   nfs41: support mi...
197
  	int (*renew_lease)(struct nfs_client *, struct rpc_cred *);
29fba38b7   Benny Halevy   nfs41: lease renewal
198
  };
f786aa90e   Al Viro   constify dentry_o...
199
  extern const struct dentry_operations nfs4_dentry_operations;
92e1d5be9   Arjan van de Ven   [PATCH] mark stru...
200
  extern const struct inode_operations nfs4_dir_inode_operations;
6b3b5496d   J. Bruce Fields   [PATCH] NFSv4: Ad...
201

4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
202
  /* nfs4proc.c */
bb8b27e50   Trond Myklebust   NFSv4: Clean up t...
203
204
  extern int nfs4_proc_setclientid(struct nfs_client *, u32, unsigned short, struct rpc_cred *, struct nfs4_setclientid_res *);
  extern int nfs4_proc_setclientid_confirm(struct nfs_client *, struct nfs4_setclientid_res *arg, struct rpc_cred *);
4d643d1df   Andy Adamson   nfs41: add create...
205
  extern int nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred);
591d71cbd   Andy Adamson   nfs41: establish ...
206
  extern int nfs4_init_clientid(struct nfs_client *, struct rpc_cred *);
4d643d1df   Andy Adamson   nfs41: add create...
207
  extern int nfs41_init_clientid(struct nfs_client *, struct rpc_cred *);
643168c2d   Al Viro   nfs4_closedata do...
208
  extern int nfs4_do_close(struct nfs4_state *state, gfp_t gfp_mask, int wait, bool roc);
55a975937   Trond Myklebust   NFS: Ensure the c...
209
  extern int nfs4_server_capabilities(struct nfs_server *server, struct nfs_fh *fhandle);
56659e992   Trond Myklebust   NFSv4: 'constify'...
210
  extern int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name,
7aaa0b3bd   Manoj Naik   NFSv4: convert fs...
211
  		struct nfs4_fs_locations *fs_locations, struct page *page);
d3c7b7ccc   Trond Myklebust   NFSv4: Add suppor...
212
  extern void nfs4_release_lockowner(const struct nfs4_lock_state *);
64c2ce8b7   Aneesh Kumar K.V   nfsv4: Switch to ...
213
  extern const struct xattr_handler *nfs4_xattr_handlers[];
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
214

557134a39   Andy Adamson   nfs41: sessions c...
215
  #if defined(CONFIG_NFS_V4_1)
035168ab3   Trond Myklebust   NFSv4.1: Make nfs...
216
217
218
219
220
221
  static inline struct nfs4_session *nfs4_get_session(const struct nfs_server *server)
  {
  	return server->nfs_client->cl_session;
  }
  
  extern int nfs4_setup_sequence(const struct nfs_server *server,
fbcd4abcb   Andy Adamson   nfs41: setup_sequ...
222
223
  		struct nfs4_sequence_args *args, struct nfs4_sequence_res *res,
  		int cache_reply, struct rpc_task *task);
dc70d7b31   Andy Adamson   NFSv4.1: filelayo...
224
225
226
  extern int nfs41_setup_sequence(struct nfs4_session *session,
  		struct nfs4_sequence_args *args, struct nfs4_sequence_res *res,
  		int cache_reply, struct rpc_task *task);
557134a39   Andy Adamson   nfs41: sessions c...
227
228
  extern void nfs4_destroy_session(struct nfs4_session *session);
  extern struct nfs4_session *nfs4_alloc_session(struct nfs_client *clp);
f26468fb9   Trond Myklebust   NFSv41: Fix nfs4_...
229
  extern int nfs4_proc_create_session(struct nfs_client *);
c3fad1b1a   Andy Adamson   nfs41: add sessio...
230
  extern int nfs4_proc_destroy_session(struct nfs4_session *);
fccba8045   Trond Myklebust   NFSv4: Fix an NFS...
231
  extern int nfs4_init_session(struct nfs_server *server);
9430fb6b5   Ricardo Labiaga   nfs41: nfs41_setu...
232
233
  extern int nfs4_proc_get_lease_time(struct nfs_client *clp,
  		struct nfs_fsinfo *fsinfo);
863a3c6c6   Andy Adamson   NFSv4.1: layoutco...
234
  extern int nfs4_proc_layoutcommit(struct nfs4_layoutcommit_data *data,
ef3115378   Andy Adamson   NFSv4.1 convert l...
235
  				  bool sync);
94de8b27d   Andy Adamson   NFSv4.1: add MDS ...
236
237
238
239
240
241
242
  
  static inline bool
  is_ds_only_client(struct nfs_client *clp)
  {
  	return (clp->cl_exchange_flags & EXCHGID4_FLAG_MASK_PNFS) ==
  		EXCHGID4_FLAG_USE_PNFS_DS;
  }
d83217c13   Andy Adamson   NFSv4.1: data ser...
243
244
245
246
247
248
  
  static inline bool
  is_ds_client(struct nfs_client *clp)
  {
  	return clp->cl_exchange_flags & EXCHGID4_FLAG_USE_PNFS_DS;
  }
fbcd4abcb   Andy Adamson   nfs41: setup_sequ...
249
  #else /* CONFIG_NFS_v4_1 */
035168ab3   Trond Myklebust   NFSv4.1: Make nfs...
250
251
252
253
254
255
  static inline struct nfs4_session *nfs4_get_session(const struct nfs_server *server)
  {
  	return NULL;
  }
  
  static inline int nfs4_setup_sequence(const struct nfs_server *server,
fbcd4abcb   Andy Adamson   nfs41: setup_sequ...
256
257
258
259
260
  		struct nfs4_sequence_args *args, struct nfs4_sequence_res *res,
  		int cache_reply, struct rpc_task *task)
  {
  	return 0;
  }
fccba8045   Trond Myklebust   NFSv4: Fix an NFS...
261
262
263
264
265
  
  static inline int nfs4_init_session(struct nfs_server *server)
  {
  	return 0;
  }
94de8b27d   Andy Adamson   NFSv4.1: add MDS ...
266
267
268
  
  static inline bool
  is_ds_only_client(struct nfs_client *clp)
d83217c13   Andy Adamson   NFSv4.1: data ser...
269
270
271
272
273
274
  {
  	return false;
  }
  
  static inline bool
  is_ds_client(struct nfs_client *clp)
94de8b27d   Andy Adamson   NFSv4.1: add MDS ...
275
276
277
  {
  	return false;
  }
557134a39   Andy Adamson   nfs41: sessions c...
278
  #endif /* CONFIG_NFS_V4_1 */
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
279

97dc13594   Trond Myklebust   NFSv41: Clean up ...
280
  extern const struct nfs4_minor_version_ops *nfs_v4_minor_ops[];
29fba38b7   Benny Halevy   nfs41: lease renewal
281

4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
282
283
284
  extern const u32 nfs4_fattr_bitmap[2];
  extern const u32 nfs4_statfs_bitmap[2];
  extern const u32 nfs4_pathconf_bitmap[2];
dae100c2b   Fred Isaman   pnfs: ask for lay...
285
  extern const u32 nfs4_fsinfo_bitmap[3];
830b8e33f   Manoj Naik   NFSv4: Define an ...
286
  extern const u32 nfs4_fs_locations_bitmap[2];
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
287
288
  
  /* nfs4renewd.c */
adfa6f980   David Howells   NFS: Rename struc...
289
  extern void nfs4_schedule_state_renewal(struct nfs_client *);
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
290
  extern void nfs4_renewd_prepare_shutdown(struct nfs_server *);
adfa6f980   David Howells   NFS: Rename struc...
291
  extern void nfs4_kill_renewd(struct nfs_client *);
65f27f384   David Howells   WorkStruct: Pass ...
292
  extern void nfs4_renew_state(struct work_struct *);
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
293
294
  
  /* nfs4state.c */
a7b721037   Andy Adamson   nfs41: introduce ...
295
  struct rpc_cred *nfs4_get_setclientid_cred(struct nfs_client *clp);
6dc9d57af   Trond Myklebust   NFSv4: Callers to...
296
  struct rpc_cred *nfs4_get_renew_cred_locked(struct nfs_client *clp);
a7b721037   Andy Adamson   nfs41: introduce ...
297
298
  #if defined(CONFIG_NFS_V4_1)
  struct rpc_cred *nfs4_get_machine_cred_locked(struct nfs_client *clp);
b4b82607f   Andy Adamson   nfs41: get_clid_c...
299
  struct rpc_cred *nfs4_get_exchange_id_cred(struct nfs_client *clp);
0400a6b0c   Trond Myklebust   NFSv4/4.1: Fix nf...
300
301
302
303
304
  extern void nfs4_schedule_session_recovery(struct nfs4_session *);
  #else
  static inline void nfs4_schedule_session_recovery(struct nfs4_session *session)
  {
  }
a7b721037   Andy Adamson   nfs41: introduce ...
305
  #endif /* CONFIG_NFS_V4_1 */
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
306
307
308
  
  extern struct nfs4_state_owner * nfs4_get_state_owner(struct nfs_server *, struct rpc_cred *);
  extern void nfs4_put_state_owner(struct nfs4_state_owner *);
0aaaf5c42   Chuck Lever   NFS: Cache state ...
309
  extern void nfs4_purge_state_owners(struct nfs_server *);
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
310
311
  extern struct nfs4_state * nfs4_get_open_state(struct inode *, struct nfs4_state_owner *);
  extern void nfs4_put_open_state(struct nfs4_state *);
643168c2d   Al Viro   nfs4_closedata do...
312
313
  extern void nfs4_close_state(struct nfs4_state *, fmode_t);
  extern void nfs4_close_sync(struct nfs4_state *, fmode_t);
dc0b027df   Trond Myklebust   NFSv4: Convert th...
314
  extern void nfs4_state_set_mode_locked(struct nfs4_state *, fmode_t);
0400a6b0c   Trond Myklebust   NFSv4/4.1: Fix nf...
315
  extern void nfs4_schedule_lease_recovery(struct nfs_client *);
b0d3ded1a   Trond Myklebust   NFSv4: Clean up n...
316
  extern void nfs4_schedule_state_manager(struct nfs_client *);
042b60beb   Trond Myklebust   NFSv4: renewd nee...
317
  extern void nfs4_schedule_path_down_recovery(struct nfs_client *clp);
0400a6b0c   Trond Myklebust   NFSv4/4.1: Fix nf...
318
  extern void nfs4_schedule_stateid_recovery(const struct nfs_server *, struct nfs4_state *);
0629e370d   Alexandros Batsakis   nfs41: check SEQU...
319
  extern void nfs41_handle_sequence_flag_errors(struct nfs_client *clp, u32 flags);
b9efa1b27   Andy Adamson   nfs41: implement ...
320
  extern void nfs41_handle_recall_slot(struct nfs_client *clp);
78fe0f41d   Weston Andros Adamson   NFS: use scope fr...
321
322
  extern void nfs41_handle_server_scope(struct nfs_client *,
  				      struct server_scope **);
faf5f49c2   Trond Myklebust   NFSv4: Make NFS c...
323
  extern void nfs4_put_lock_state(struct nfs4_lock_state *lsp);
8d0a8a9d0   Trond Myklebust   [PATCH] NFSv4: Cl...
324
  extern int nfs4_set_lock_state(struct nfs4_state *state, struct file_lock *fl);
77041ed9b   Trond Myklebust   NFSv4: Ensure the...
325
  extern void nfs4_copy_stateid(nfs4_stateid *, struct nfs4_state *, fl_owner_t, pid_t);
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
326

8535b2be5   Trond Myklebust   NFSv4: Don't use ...
327
  extern struct nfs_seqid *nfs_alloc_seqid(struct nfs_seqid_counter *counter, gfp_t gfp_mask);
cee54fc94   Trond Myklebust   NFSv4: Add functi...
328
329
330
  extern int nfs_wait_on_sequence(struct nfs_seqid *seqid, struct rpc_task *task);
  extern void nfs_increment_open_seqid(int status, struct nfs_seqid *seqid);
  extern void nfs_increment_lock_seqid(int status, struct nfs_seqid *seqid);
72211dbe7   Trond Myklebust   NFSv4: Release th...
331
  extern void nfs_release_seqid(struct nfs_seqid *seqid);
cee54fc94   Trond Myklebust   NFSv4: Add functi...
332
  extern void nfs_free_seqid(struct nfs_seqid *seqid);
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
333
334
335
  extern const nfs4_stateid zero_stateid;
  
  /* nfs4xdr.c */
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
336
337
338
339
340
341
  extern struct rpc_procinfo nfs4_procedures[];
  
  struct nfs4_mount_data;
  
  /* callback_xdr.c */
  extern struct svc_version nfs4_callback_version1;
07bccc2dd   Alexandros Batsakis   nfs41: add suppor...
342
  extern struct svc_version nfs4_callback_version4;
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
343
344
  
  #else
643168c2d   Al Viro   nfs4_closedata do...
345
346
  #define nfs4_close_state(a, b) do { } while (0)
  #define nfs4_close_sync(a, b) do { } while (0)
4ce79717c   Trond Myklebust   [PATCH] NFS: Head...
347
348
349
  
  #endif /* CONFIG_NFS_V4 */
  #endif /* __LINUX_FS_NFS_NFS4_FS.H */