aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2008-12-23 15:21:49 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2008-12-23 15:21:49 -0500
commit0d62f85a81216f30a0ba1479b93e84103a5d535b (patch)
tree623a726d992341788a6e68440c2d31c80ea8c58b
parentf3c76491e7ecacbb7942633f3b2a3514b7476ef9 (diff)
NFSv4: Fix a BAD_SEQUENCEID condition.
We really shouldn't be resetting the sequence ids when doing state expiration recovery, since we don't know if the server still remembers our previous state owners. There are servers out there that do attempt to preserve client state even if the lease has expired. Such a server would only release that state if a conflicting OPEN request occurs. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--fs/nfs/nfs4state.c2
1 files changed, 0 insertions, 2 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index 9e76712dcae9..6dc36a0d9a85 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -951,7 +951,6 @@ static void nfs4_clear_open_state(struct nfs4_state *state)
951 clear_bit(NFS_O_WRONLY_STATE, &state->flags); 951 clear_bit(NFS_O_WRONLY_STATE, &state->flags);
952 clear_bit(NFS_O_RDWR_STATE, &state->flags); 952 clear_bit(NFS_O_RDWR_STATE, &state->flags);
953 list_for_each_entry(lock, &state->lock_states, ls_locks) { 953 list_for_each_entry(lock, &state->lock_states, ls_locks) {
954 lock->ls_seqid.counter = 0;
955 lock->ls_seqid.flags = 0; 954 lock->ls_seqid.flags = 0;
956 lock->ls_flags &= ~NFS_LOCK_INITIALIZED; 955 lock->ls_flags &= ~NFS_LOCK_INITIALIZED;
957 } 956 }
@@ -966,7 +965,6 @@ static void nfs4_state_mark_reclaim_helper(struct nfs_client *clp, int (*mark_re
966 /* Reset all sequence ids to zero */ 965 /* Reset all sequence ids to zero */
967 for (pos = rb_first(&clp->cl_state_owners); pos != NULL; pos = rb_next(pos)) { 966 for (pos = rb_first(&clp->cl_state_owners); pos != NULL; pos = rb_next(pos)) {
968 sp = rb_entry(pos, struct nfs4_state_owner, so_client_node); 967 sp = rb_entry(pos, struct nfs4_state_owner, so_client_node);
969 sp->so_seqid.counter = 0;
970 sp->so_seqid.flags = 0; 968 sp->so_seqid.flags = 0;
971 spin_lock(&sp->so_lock); 969 spin_lock(&sp->so_lock);
972 list_for_each_entry(state, &sp->so_states, open_states) { 970 list_for_each_entry(state, &sp->so_states, open_states) {