NFS: Remove bad delegations during open recovery
I put the client into an open recovery loop by: Client: Open file read half Server: Expire client (echo 0 > /sys/kernel/debug/nfsd/forget_clients) Client: Drop vm cache (echo 3 > /proc/sys/vm/drop_caches) finish reading file This causes a loop because the client never updates the nfs4_state after discovering that the delegation is invalid. This means it will keep trying to read using the bad delegation rather than attempting to re-open the file. Signed-off-by: Bryan Schumaker <bjschuma@netapp.com> CC: stable@vger.kernel.org [3.4+] Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
fcb6d9c6b7
commit
6938867edb
|
@ -1774,7 +1774,11 @@ static void nfs41_clear_delegation_stateid(struct nfs4_state *state)
|
|||
* informs us the stateid is unrecognized. */
|
||||
if (status != -NFS4ERR_BAD_STATEID)
|
||||
nfs41_free_stateid(server, stateid);
|
||||
nfs_remove_bad_delegation(state->inode);
|
||||
|
||||
write_seqlock(&state->seqlock);
|
||||
nfs4_stateid_copy(&state->stateid, &state->open_stateid);
|
||||
write_sequnlock(&state->seqlock);
|
||||
clear_bit(NFS_DELEGATED_STATE, &state->flags);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue