NFSv4: Clean up nfs_expire_all_delegations()
Let the actual delegreturn stuff be run in the state manager thread rather than allocating a separate kthread. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
@ -354,37 +354,16 @@ static void nfs_client_mark_return_all_delegations(struct nfs_client *clp)
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
static int nfs_do_expire_all_delegations(void *ptr)
|
||||
static void nfs_delegation_run_state_manager(struct nfs_client *clp)
|
||||
{
|
||||
struct nfs_client *clp = ptr;
|
||||
|
||||
allow_signal(SIGKILL);
|
||||
|
||||
if (test_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0)
|
||||
goto out;
|
||||
if (test_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state) == 0)
|
||||
goto out;
|
||||
nfs_client_mark_return_all_delegations(clp);
|
||||
nfs_client_return_marked_delegations(clp);
|
||||
out:
|
||||
nfs_put_client(clp);
|
||||
module_put_and_exit(0);
|
||||
if (test_bit(NFS4CLNT_DELEGRETURN, &clp->cl_state))
|
||||
nfs4_schedule_state_manager(clp);
|
||||
}
|
||||
|
||||
void nfs_expire_all_delegations(struct nfs_client *clp)
|
||||
{
|
||||
struct task_struct *task;
|
||||
|
||||
__module_get(THIS_MODULE);
|
||||
atomic_inc(&clp->cl_count);
|
||||
task = kthread_run(nfs_do_expire_all_delegations, clp,
|
||||
"%s-delegreturn",
|
||||
rpc_peeraddr2str(clp->cl_rpcclient,
|
||||
RPC_DISPLAY_ADDR));
|
||||
if (!IS_ERR(task))
|
||||
return;
|
||||
nfs_put_client(clp);
|
||||
module_put(THIS_MODULE);
|
||||
nfs_client_mark_return_all_delegations(clp);
|
||||
nfs_delegation_run_state_manager(clp);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user