NFSv4: Clean up nfs4_call_async()

Use rpc_run_task() instead of doing it ourselves.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
Trond Myklebust 2007-06-11 23:05:07 -04:00
parent 4a35bd41af
commit b39e625b6e
3 changed files with 14 additions and 22 deletions

View File

@ -295,18 +295,6 @@ static void nfs4_opendata_free(struct nfs4_opendata *p)
} }
} }
/* Helper for asynchronous RPC calls */
static int nfs4_call_async(struct rpc_clnt *clnt,
const struct rpc_call_ops *tk_ops, void *calldata)
{
struct rpc_task *task;
if (!(task = rpc_new_task(clnt, RPC_TASK_ASYNC, tk_ops, calldata)))
return -ENOMEM;
rpc_execute(task);
return 0;
}
static int nfs4_wait_for_completion_rpc_task(struct rpc_task *task) static int nfs4_wait_for_completion_rpc_task(struct rpc_task *task)
{ {
sigset_t oldset; sigset_t oldset;
@ -1218,6 +1206,8 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state)
{ {
struct nfs_server *server = NFS_SERVER(state->inode); struct nfs_server *server = NFS_SERVER(state->inode);
struct nfs4_closedata *calldata; struct nfs4_closedata *calldata;
struct nfs4_state_owner *sp = state->owner;
struct rpc_task *task;
int status = -ENOMEM; int status = -ENOMEM;
calldata = kmalloc(sizeof(*calldata), GFP_KERNEL); calldata = kmalloc(sizeof(*calldata), GFP_KERNEL);
@ -1237,14 +1227,16 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state)
calldata->path.mnt = mntget(path->mnt); calldata->path.mnt = mntget(path->mnt);
calldata->path.dentry = dget(path->dentry); calldata->path.dentry = dget(path->dentry);
status = nfs4_call_async(server->client, &nfs4_close_ops, calldata); task = rpc_run_task(server->client, RPC_TASK_ASYNC, &nfs4_close_ops, calldata);
if (status == 0) if (IS_ERR(task))
goto out; return PTR_ERR(task);
rpc_put_task(task);
nfs_free_seqid(calldata->arg.seqid); return 0;
out_free_calldata: out_free_calldata:
kfree(calldata); kfree(calldata);
out: out:
nfs4_put_open_state(state);
nfs4_put_state_owner(sp);
return status; return status;
} }

View File

@ -375,10 +375,11 @@ void nfs4_close_state(struct path *path, struct nfs4_state *state, mode_t mode)
spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock);
spin_unlock(&owner->so_lock); spin_unlock(&owner->so_lock);
if (oldstate != newstate && nfs4_do_close(path, state) == 0) if (oldstate == newstate) {
return; nfs4_put_open_state(state);
nfs4_put_open_state(state); nfs4_put_state_owner(owner);
nfs4_put_state_owner(owner); } else
nfs4_do_close(path, state);
} }
/* /*

View File

@ -30,7 +30,6 @@ EXPORT_SYMBOL(rpc_wake_up_next);
EXPORT_SYMBOL(rpc_wake_up_task); EXPORT_SYMBOL(rpc_wake_up_task);
EXPORT_SYMBOL(rpciod_down); EXPORT_SYMBOL(rpciod_down);
EXPORT_SYMBOL(rpciod_up); EXPORT_SYMBOL(rpciod_up);
EXPORT_SYMBOL(rpc_new_task);
EXPORT_SYMBOL(rpc_wake_up_status); EXPORT_SYMBOL(rpc_wake_up_status);
/* RPC client functions */ /* RPC client functions */