aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4xdr.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.com>2016-12-19 11:48:23 +1100
committerTrond Myklebust <trond.myklebust@primarydata.com>2016-12-19 17:29:51 -0500
commit86cfb0418537460baf0de0b5e9253784be27a6f9 (patch)
treea1006f743bcca09459e159e6ebe32e20cdd25461 /fs/nfs/nfs4xdr.c
parentNFSv4: ensure __nfs4_find_lock_state returns consistent result. (diff)
downloadlinux-dev-86cfb0418537460baf0de0b5e9253784be27a6f9.tar.xz
linux-dev-86cfb0418537460baf0de0b5e9253784be27a6f9.zip
NFS: Don't disconnect open-owner on NFS4ERR_BAD_SEQID
When an NFS4ERR_BAD_SEQID is received the open-owner is removed from the ->state_owners rbtree so that it will no longer be used. If any stateids attached to this open-owner are still in use, and if a request using one gets an NFS4ERR_BAD_STATEID reply, this can for bad. The state is marked as needing recovery and the nfs4_state_manager() is scheduled to clean up. nfs4_state_manager() finds states to be recovered by walking the state_owners rbtree. As the open-owner is not in the rbtree, the bad state is not found so nfs4_state_manager() completes having done nothing. The request is then retried, with a predicatable result (indefinite retries). If the stateid is for a delegation, this open_owner will be used to open files when the delegation is returned. For that to work, a new open-owner needs to be presented to the server. This patch changes NFS4ERR_BAD_SEQID handling to leave the open-owner in the rbtree but updates the 'create_time' so it looks like a new open-owner. With this the indefinite retries no longer happen. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/nfs4xdr.c')
0 files changed, 0 insertions, 0 deletions