diff options
author | Andy Adamson <andros@netapp.com> | 2009-04-01 09:22:39 -0400 |
---|---|---|
committer | Benny Halevy <bhalevy@panasas.com> | 2009-06-17 15:25:06 -0400 |
commit | c3fad1b1aaf850bf692642642ace7cd0d64af0a3 (patch) | |
tree | ff8822016d004d9f0cbd67a3373f5f1f4527f363 /fs/nfs/nfs4_fs.h | |
parent | 76db6d9500caeaa774a3e32a997eba30bbdc176b (diff) |
nfs41: add session reset to state manager
Move the code to reset a session from the session_reclaimer to the
nfs4_state_manager. Destroy the session, and create a new one. Treat
NFS4ERR_BADSESSION and NFS4ERR_DEADSESSION as a successful
nfs4_proc_destroy_session. Signal nfs4_proc_create_session that this is a
session reset so that the session slot table is re-used.
If the clientid is stale, set both NFS4CLNT_LEASE_EXPIRED and
NFS4CLNT_SESSION_SETUP bits and retry.
Use a switch statement in nfs4_session_recovery_handle_error for future
patche which will add handling for other errors.
Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
[nfs41: session reset in nfs4_recovery_handle_error]
Signed-off-by: Andy Adamson <andros@netapp.com>
[nfs41: reset session on nfs4_do_reclaim session reset error]
If nfs4_do_reclaim gets a session reset error, nfs4_recovery_handle_error
will set the NFS4CLNT_SESSION_SETUP bit, and the state manager should
continue processing to reset the session.
Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
[move nfs4_proc_destroy_session declaration here]
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4_fs.h')
-rw-r--r-- | fs/nfs/nfs4_fs.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index 288717abaddc..7cc1cddfd9ba 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h | |||
@@ -210,6 +210,7 @@ extern int nfs4_setup_sequence(struct nfs_client *clp, | |||
210 | extern void nfs4_destroy_session(struct nfs4_session *session); | 210 | extern void nfs4_destroy_session(struct nfs4_session *session); |
211 | extern struct nfs4_session *nfs4_alloc_session(struct nfs_client *clp); | 211 | extern struct nfs4_session *nfs4_alloc_session(struct nfs_client *clp); |
212 | extern int nfs4_proc_create_session(struct nfs_client *, int reset); | 212 | extern int nfs4_proc_create_session(struct nfs_client *, int reset); |
213 | extern int nfs4_proc_destroy_session(struct nfs4_session *); | ||
213 | #else /* CONFIG_NFS_v4_1 */ | 214 | #else /* CONFIG_NFS_v4_1 */ |
214 | static inline int nfs4_setup_sequence(struct nfs_client *clp, | 215 | static inline int nfs4_setup_sequence(struct nfs_client *clp, |
215 | struct nfs4_sequence_args *args, struct nfs4_sequence_res *res, | 216 | struct nfs4_sequence_args *args, struct nfs4_sequence_res *res, |