Commit 47c2199b authored by Trond Myklebust's avatar Trond Myklebust

NFSv4.1: Ensure state manager thread dies on last umount

Currently, the state manager may continue to try recovering state forever
even after the last filesystem to reference that nfs_client has umounted.
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
Cc: stable@kernel.org
parent e3b2854f
...@@ -1607,7 +1607,7 @@ static void nfs4_state_manager(struct nfs_client *clp) ...@@ -1607,7 +1607,7 @@ static void nfs4_state_manager(struct nfs_client *clp)
int status = 0; int status = 0;
/* Ensure exclusive access to NFSv4 state */ /* Ensure exclusive access to NFSv4 state */
for(;;) { do {
if (test_and_clear_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) { if (test_and_clear_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state)) {
/* We're going to have to re-establish a clientid */ /* We're going to have to re-establish a clientid */
status = nfs4_reclaim_lease(clp); status = nfs4_reclaim_lease(clp);
...@@ -1691,7 +1691,7 @@ static void nfs4_state_manager(struct nfs_client *clp) ...@@ -1691,7 +1691,7 @@ static void nfs4_state_manager(struct nfs_client *clp)
break; break;
if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0) if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0)
break; break;
} } while (atomic_read(&clp->cl_count) > 1);
return; return;
out_error: out_error:
printk(KERN_WARNING "Error: state manager failed on NFSv4 server %s" printk(KERN_WARNING "Error: state manager failed on NFSv4 server %s"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment