]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/nfs/delegation.c
NFSv4: Clean up nfs_expire_all_delegations()
[linux-2.6-omap-h63xx.git] / fs / nfs / delegation.c
index 4692fdc8abf367a0884a8c12cd5eadb1cddc4973..21eda6c083d0eebc71bc0e6706f4c3e00e61feb8 100644 (file)
@@ -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);
 }
 
 /*