NFSv4: Fix the case where NFSv4 renewal fails
If the asynchronous lease renewal fails (usually due to a soft timeout), then we _must_ schedule state recovery in order to ensure that we don't lose the lease unnecessarily or, if the lease is already lost, that we recover the locking state promptly... Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
d0367a508a
commit
95baa25c73
1 changed files with 3 additions and 6 deletions
|
@ -2594,12 +2594,9 @@ static void nfs4_renew_done(struct rpc_task *task, void *data)
|
||||||
unsigned long timestamp = (unsigned long)data;
|
unsigned long timestamp = (unsigned long)data;
|
||||||
|
|
||||||
if (task->tk_status < 0) {
|
if (task->tk_status < 0) {
|
||||||
switch (task->tk_status) {
|
/* Unless we're shutting down, schedule state recovery! */
|
||||||
case -NFS4ERR_STALE_CLIENTID:
|
if (test_bit(NFS_CS_RENEWD, &clp->cl_res_state) != 0)
|
||||||
case -NFS4ERR_EXPIRED:
|
nfs4_schedule_state_recovery(clp);
|
||||||
case -NFS4ERR_CB_PATH_DOWN:
|
|
||||||
nfs4_schedule_state_recovery(clp);
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
spin_lock(&clp->cl_lock);
|
spin_lock(&clp->cl_lock);
|
||||||
|
|
Loading…
Reference in a new issue