summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@primarydata.com>2015-07-05 15:26:58 -0400
committerTrond Myklebust <trond.myklebust@primarydata.com>2015-07-05 15:50:18 -0400
commitb13529059cf782f9b4e4ac0ca9d524bd922163da (patch)
tree02f1e29fa6989be3e4de821af3ccf0a1ac6ba688
parent4099287feb5833c24b5a91e1fe55207cf7559350 (diff)
downloadop-kernel-dev-b13529059cf782f9b4e4ac0ca9d524bd922163da.zip
op-kernel-dev-b13529059cf782f9b4e4ac0ca9d524bd922163da.tar.gz
NFSv4.1: Handle SEQ4_STATUS_BACKCHANNEL_FAULT correctly
RFC5661 states: The server has encountered an unrecoverable fault with the backchannel (e.g., it has lost track of the sequence ID for a slot in the backchannel). The client MUST stop sending more requests on the session's fore channel, wait for all outstanding requests to complete on the fore and back channel, and then destroy the session. Ensure we do so... Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
-rw-r--r--fs/nfs/nfs4state.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index 4694529..f2e2ad8 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -2217,9 +2217,9 @@ static void nfs41_handle_recallable_state_revoked(struct nfs_client *clp)
static void nfs41_handle_backchannel_fault(struct nfs_client *clp)
{
- nfs_expire_all_delegations(clp);
- if (test_and_set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state) == 0)
- nfs4_schedule_state_manager(clp);
+ set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state);
+ nfs4_schedule_state_manager(clp);
+
dprintk("%s: server %s declared a backchannel fault\n", __func__,
clp->cl_hostname);
}
OpenPOWER on IntegriCloud