diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-29 13:43:51 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-29 13:43:51 -0400 |
commit | 53f2c4a8fd882009a2a75c5b72d6898c0808616e (patch) | |
tree | 922293a1056c0c2358203cdab832f0e0891e628a /fs/nfs/nfs4_fs.h | |
parent | 8f6576ad476b2a22d05ddafd2ddaee102577a4ed (diff) | |
parent | cc0a98436820b161b595b8cc1d2329bcf7328107 (diff) |
Merge tag 'nfs-for-3.5-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
Pull NFS client updates from Trond Myklebust:
"New features include:
- Rewrite the O_DIRECT code so that it can share the same coalescing
and pNFS functionality as the page cache code.
- Allow the server to provide hints as to when we should use pNFS,
and when it is more efficient to read and write through the
metadata server.
- NFS cache consistency updates:
* Use the ctime to emulate a change attribute for NFSv2/v3 so that
all NFS versions can share the same cache management code.
* New cache management code will only look at the change attribute
and size attribute when deciding whether or not our cached data
is still valid or not.
* Don't request NFSv4 post-op attributes on writes in cases such as
O_DIRECT, where we don't care about data cache consistency, or
when we have a write delegation, and know that our cache is still
consistent.
* Don't request NFSv4 post-op attributes on operations such as
COMMIT, where there are no expected metadata updates.
* Don't request NFSv4 directory post-op attributes in cases where
the operations themselves already return change attribute
updates: i.e. operations such as OPEN, CREATE, REMOVE, LINK and
RENAME.
- Speed up 'ls' and friends by using READDIR rather than READDIRPLUS
if we detect no attempts to lookup filenames.
- Improve the code sharing between NFSv2/v3 and v4 mounts
- NFSv4.1 state management efficiency improvements
- More patches in preparation for NFSv4/v4.1 migration functionality."
Fix trivial conflict in fs/nfs/nfs4proc.c that was due to the dcache
qstr name initialization changes (that made the length/hash a 64-bit
union)
* tag 'nfs-for-3.5-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (146 commits)
NFSv4: Add debugging printks to state manager
NFSv4: Map NFS4ERR_SHARE_DENIED into an EACCES error instead of EIO
NFSv4: update_changeattr does not need to set NFS_INO_REVAL_PAGECACHE
NFSv4.1: nfs4_reset_session should use nfs4_handle_reclaim_lease_error
NFSv4.1: Handle other occurrences of NFS4ERR_CONN_NOT_BOUND_TO_SESSION
NFSv4.1: Handle NFS4ERR_CONN_NOT_BOUND_TO_SESSION in the state manager
NFSv4.1: Handle errors in nfs4_bind_conn_to_session
NFSv4.1: nfs4_bind_conn_to_session should drain the session
NFSv4.1: Don't clobber the seqid if exchange_id returns a confirmed clientid
NFSv4.1: Add DESTROY_CLIENTID
NFSv4.1: Ensure we use the correct credentials for bind_conn_to_session
NFSv4.1: Ensure we use the correct credentials for session create/destroy
NFSv4.1: Move NFSPROC4_CLNT_BIND_CONN_TO_SESSION to the end of the operations
NFSv4.1: Handle NFS4ERR_SEQ_MISORDERED when confirming the lease
NFSv4: When purging the lease, we must clear NFS4CLNT_LEASE_CONFIRM
NFSv4: Clean up the error handling for nfs4_reclaim_lease
NFSv4.1: Exchange ID must use GFP_NOFS allocation mode
nfs41: Use BIND_CONN_TO_SESSION for CB_PATH_DOWN*
nfs4.1: add BIND_CONN_TO_SESSION operation
NFSv4.1 test the mdsthreshold hint parameters
...
Diffstat (limited to 'fs/nfs/nfs4_fs.h')
-rw-r--r-- | fs/nfs/nfs4_fs.h | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index 8d75021020b3..c6827f93ab57 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h | |||
@@ -24,6 +24,8 @@ enum nfs4_client_state { | |||
24 | NFS4CLNT_RECALL_SLOT, | 24 | NFS4CLNT_RECALL_SLOT, |
25 | NFS4CLNT_LEASE_CONFIRM, | 25 | NFS4CLNT_LEASE_CONFIRM, |
26 | NFS4CLNT_SERVER_SCOPE_MISMATCH, | 26 | NFS4CLNT_SERVER_SCOPE_MISMATCH, |
27 | NFS4CLNT_PURGE_STATE, | ||
28 | NFS4CLNT_BIND_CONN_TO_SESSION, | ||
27 | }; | 29 | }; |
28 | 30 | ||
29 | enum nfs4_session_state { | 31 | enum nfs4_session_state { |
@@ -52,11 +54,6 @@ struct nfs4_minor_version_ops { | |||
52 | const struct nfs4_state_maintenance_ops *state_renewal_ops; | 54 | const struct nfs4_state_maintenance_ops *state_renewal_ops; |
53 | }; | 55 | }; |
54 | 56 | ||
55 | struct nfs_unique_id { | ||
56 | struct rb_node rb_node; | ||
57 | __u64 id; | ||
58 | }; | ||
59 | |||
60 | #define NFS_SEQID_CONFIRMED 1 | 57 | #define NFS_SEQID_CONFIRMED 1 |
61 | struct nfs_seqid_counter { | 58 | struct nfs_seqid_counter { |
62 | ktime_t create_time; | 59 | ktime_t create_time; |
@@ -206,12 +203,18 @@ extern const struct dentry_operations nfs4_dentry_operations; | |||
206 | extern const struct inode_operations nfs4_dir_inode_operations; | 203 | extern const struct inode_operations nfs4_dir_inode_operations; |
207 | 204 | ||
208 | /* nfs4namespace.c */ | 205 | /* nfs4namespace.c */ |
206 | rpc_authflavor_t nfs_find_best_sec(struct nfs4_secinfo_flavors *); | ||
209 | struct rpc_clnt *nfs4_create_sec_client(struct rpc_clnt *, struct inode *, struct qstr *); | 207 | struct rpc_clnt *nfs4_create_sec_client(struct rpc_clnt *, struct inode *, struct qstr *); |
208 | struct vfsmount *nfs4_submount(struct nfs_server *, struct dentry *, | ||
209 | struct nfs_fh *, struct nfs_fattr *); | ||
210 | 210 | ||
211 | /* nfs4proc.c */ | 211 | /* nfs4proc.c */ |
212 | extern int nfs4_proc_setclientid(struct nfs_client *, u32, unsigned short, struct rpc_cred *, struct nfs4_setclientid_res *); | 212 | extern int nfs4_proc_setclientid(struct nfs_client *, u32, unsigned short, struct rpc_cred *, struct nfs4_setclientid_res *); |
213 | extern int nfs4_proc_setclientid_confirm(struct nfs_client *, struct nfs4_setclientid_res *arg, struct rpc_cred *); | 213 | extern int nfs4_proc_setclientid_confirm(struct nfs_client *, struct nfs4_setclientid_res *arg, struct rpc_cred *); |
214 | extern int nfs4_proc_get_rootfh(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *); | ||
215 | extern int nfs4_proc_bind_conn_to_session(struct nfs_client *, struct rpc_cred *cred); | ||
214 | extern int nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred); | 216 | extern int nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred); |
217 | extern int nfs4_destroy_clientid(struct nfs_client *clp); | ||
215 | extern int nfs4_init_clientid(struct nfs_client *, struct rpc_cred *); | 218 | extern int nfs4_init_clientid(struct nfs_client *, struct rpc_cred *); |
216 | extern int nfs41_init_clientid(struct nfs_client *, struct rpc_cred *); | 219 | extern int nfs41_init_clientid(struct nfs_client *, struct rpc_cred *); |
217 | extern int nfs4_do_close(struct nfs4_state *state, gfp_t gfp_mask, int wait, bool roc); | 220 | extern int nfs4_do_close(struct nfs4_state *state, gfp_t gfp_mask, int wait, bool roc); |
@@ -239,8 +242,8 @@ extern int nfs41_setup_sequence(struct nfs4_session *session, | |||
239 | struct rpc_task *task); | 242 | struct rpc_task *task); |
240 | extern void nfs4_destroy_session(struct nfs4_session *session); | 243 | extern void nfs4_destroy_session(struct nfs4_session *session); |
241 | extern struct nfs4_session *nfs4_alloc_session(struct nfs_client *clp); | 244 | extern struct nfs4_session *nfs4_alloc_session(struct nfs_client *clp); |
242 | extern int nfs4_proc_create_session(struct nfs_client *); | 245 | extern int nfs4_proc_create_session(struct nfs_client *, struct rpc_cred *); |
243 | extern int nfs4_proc_destroy_session(struct nfs4_session *); | 246 | extern int nfs4_proc_destroy_session(struct nfs4_session *, struct rpc_cred *); |
244 | extern int nfs4_init_session(struct nfs_server *server); | 247 | extern int nfs4_init_session(struct nfs_server *server); |
245 | extern int nfs4_proc_get_lease_time(struct nfs_client *clp, | 248 | extern int nfs4_proc_get_lease_time(struct nfs_client *clp, |
246 | struct nfs_fsinfo *fsinfo); | 249 | struct nfs_fsinfo *fsinfo); |
@@ -310,9 +313,9 @@ struct rpc_cred *nfs4_get_renew_cred_locked(struct nfs_client *clp); | |||
310 | #if defined(CONFIG_NFS_V4_1) | 313 | #if defined(CONFIG_NFS_V4_1) |
311 | struct rpc_cred *nfs4_get_machine_cred_locked(struct nfs_client *clp); | 314 | struct rpc_cred *nfs4_get_machine_cred_locked(struct nfs_client *clp); |
312 | struct rpc_cred *nfs4_get_exchange_id_cred(struct nfs_client *clp); | 315 | struct rpc_cred *nfs4_get_exchange_id_cred(struct nfs_client *clp); |
313 | extern void nfs4_schedule_session_recovery(struct nfs4_session *); | 316 | extern void nfs4_schedule_session_recovery(struct nfs4_session *, int); |
314 | #else | 317 | #else |
315 | static inline void nfs4_schedule_session_recovery(struct nfs4_session *session) | 318 | static inline void nfs4_schedule_session_recovery(struct nfs4_session *session, int err) |
316 | { | 319 | { |
317 | } | 320 | } |
318 | #endif /* CONFIG_NFS_V4_1 */ | 321 | #endif /* CONFIG_NFS_V4_1 */ |
@@ -334,7 +337,7 @@ extern void nfs4_schedule_stateid_recovery(const struct nfs_server *, struct nfs | |||
334 | extern void nfs41_handle_sequence_flag_errors(struct nfs_client *clp, u32 flags); | 337 | extern void nfs41_handle_sequence_flag_errors(struct nfs_client *clp, u32 flags); |
335 | extern void nfs41_handle_recall_slot(struct nfs_client *clp); | 338 | extern void nfs41_handle_recall_slot(struct nfs_client *clp); |
336 | extern void nfs41_handle_server_scope(struct nfs_client *, | 339 | extern void nfs41_handle_server_scope(struct nfs_client *, |
337 | struct server_scope **); | 340 | struct nfs41_server_scope **); |
338 | extern void nfs4_put_lock_state(struct nfs4_lock_state *lsp); | 341 | extern void nfs4_put_lock_state(struct nfs4_lock_state *lsp); |
339 | extern int nfs4_set_lock_state(struct nfs4_state *state, struct file_lock *fl); | 342 | extern int nfs4_set_lock_state(struct nfs4_state *state, struct file_lock *fl); |
340 | extern void nfs4_select_rw_stateid(nfs4_stateid *, struct nfs4_state *, | 343 | extern void nfs4_select_rw_stateid(nfs4_stateid *, struct nfs4_state *, |