mirror of https://gitee.com/openkylin/linux.git
NFSv4.1: Handle slot recalls before doing state recovery
Handling a slot recall situation should always takes precedence over state recovery to allow the server to manage its resources. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
8ed27d4fb1
commit
1a2dd948e2
|
@ -1814,7 +1814,6 @@ static int nfs4_recall_slot(struct nfs_client *clp)
|
|||
spin_unlock(&fc_tbl->slot_tbl_lock);
|
||||
|
||||
kfree(old);
|
||||
nfs4_end_drain_session(clp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1920,6 +1919,16 @@ static void nfs4_state_manager(struct nfs_client *clp)
|
|||
continue;
|
||||
}
|
||||
|
||||
/* Recall session slots */
|
||||
if (test_and_clear_bit(NFS4CLNT_RECALL_SLOT, &clp->cl_state)
|
||||
&& nfs4_has_session(clp)) {
|
||||
section = "recall slot";
|
||||
status = nfs4_recall_slot(clp);
|
||||
if (status < 0)
|
||||
goto out_error;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* First recover reboot state... */
|
||||
if (test_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state)) {
|
||||
section = "reclaim reboot";
|
||||
|
@ -1953,16 +1962,6 @@ static void nfs4_state_manager(struct nfs_client *clp)
|
|||
nfs_client_return_marked_delegations(clp);
|
||||
continue;
|
||||
}
|
||||
/* Recall session slots */
|
||||
if (test_and_clear_bit(NFS4CLNT_RECALL_SLOT, &clp->cl_state)
|
||||
&& nfs4_has_session(clp)) {
|
||||
section = "recall slot";
|
||||
status = nfs4_recall_slot(clp);
|
||||
if (status < 0)
|
||||
goto out_error;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
nfs4_clear_state_manager_bit(clp);
|
||||
/* Did we race with an attempt to give us more work? */
|
||||
|
|
Loading…
Reference in New Issue