|
@@ -779,12 +779,18 @@ static int _nfs4_proc_open_confirm(struct nfs4_opendata *data)
|
|
|
{
|
|
|
struct nfs_server *server = NFS_SERVER(data->dir->d_inode);
|
|
|
struct rpc_task *task;
|
|
|
+ struct rpc_task_setup task_setup_data = {
|
|
|
+ .rpc_client = server->client,
|
|
|
+ .callback_ops = &nfs4_open_confirm_ops,
|
|
|
+ .callback_data = data,
|
|
|
+ .flags = RPC_TASK_ASYNC,
|
|
|
+ };
|
|
|
int status;
|
|
|
|
|
|
kref_get(&data->kref);
|
|
|
data->rpc_done = 0;
|
|
|
data->rpc_status = 0;
|
|
|
- task = rpc_run_task(server->client, RPC_TASK_ASYNC, &nfs4_open_confirm_ops, data);
|
|
|
+ task = rpc_run_task(&task_setup_data);
|
|
|
if (IS_ERR(task))
|
|
|
return PTR_ERR(task);
|
|
|
status = nfs4_wait_for_completion_rpc_task(task);
|
|
@@ -908,13 +914,19 @@ static int _nfs4_proc_open(struct nfs4_opendata *data)
|
|
|
struct nfs_openargs *o_arg = &data->o_arg;
|
|
|
struct nfs_openres *o_res = &data->o_res;
|
|
|
struct rpc_task *task;
|
|
|
+ struct rpc_task_setup task_setup_data = {
|
|
|
+ .rpc_client = server->client,
|
|
|
+ .callback_ops = &nfs4_open_ops,
|
|
|
+ .callback_data = data,
|
|
|
+ .flags = RPC_TASK_ASYNC,
|
|
|
+ };
|
|
|
int status;
|
|
|
|
|
|
kref_get(&data->kref);
|
|
|
data->rpc_done = 0;
|
|
|
data->rpc_status = 0;
|
|
|
data->cancelled = 0;
|
|
|
- task = rpc_run_task(server->client, RPC_TASK_ASYNC, &nfs4_open_ops, data);
|
|
|
+ task = rpc_run_task(&task_setup_data);
|
|
|
if (IS_ERR(task))
|
|
|
return PTR_ERR(task);
|
|
|
status = nfs4_wait_for_completion_rpc_task(task);
|
|
@@ -1309,6 +1321,11 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state, int wait)
|
|
|
struct nfs4_closedata *calldata;
|
|
|
struct nfs4_state_owner *sp = state->owner;
|
|
|
struct rpc_task *task;
|
|
|
+ struct rpc_task_setup task_setup_data = {
|
|
|
+ .rpc_client = server->client,
|
|
|
+ .callback_ops = &nfs4_close_ops,
|
|
|
+ .flags = RPC_TASK_ASYNC,
|
|
|
+ };
|
|
|
int status = -ENOMEM;
|
|
|
|
|
|
calldata = kmalloc(sizeof(*calldata), GFP_KERNEL);
|
|
@@ -1328,7 +1345,8 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state, int wait)
|
|
|
calldata->path.mnt = mntget(path->mnt);
|
|
|
calldata->path.dentry = dget(path->dentry);
|
|
|
|
|
|
- task = rpc_run_task(server->client, RPC_TASK_ASYNC, &nfs4_close_ops, calldata);
|
|
|
+ task_setup_data.callback_data = calldata;
|
|
|
+ task = rpc_run_task(&task_setup_data);
|
|
|
if (IS_ERR(task))
|
|
|
return PTR_ERR(task);
|
|
|
status = 0;
|
|
@@ -3027,6 +3045,11 @@ static int _nfs4_proc_delegreturn(struct inode *inode, struct rpc_cred *cred, co
|
|
|
struct nfs4_delegreturndata *data;
|
|
|
struct nfs_server *server = NFS_SERVER(inode);
|
|
|
struct rpc_task *task;
|
|
|
+ struct rpc_task_setup task_setup_data = {
|
|
|
+ .rpc_client = server->client,
|
|
|
+ .callback_ops = &nfs4_delegreturn_ops,
|
|
|
+ .flags = RPC_TASK_ASYNC,
|
|
|
+ };
|
|
|
int status;
|
|
|
|
|
|
data = kmalloc(sizeof(*data), GFP_KERNEL);
|
|
@@ -3043,7 +3066,8 @@ static int _nfs4_proc_delegreturn(struct inode *inode, struct rpc_cred *cred, co
|
|
|
data->timestamp = jiffies;
|
|
|
data->rpc_status = 0;
|
|
|
|
|
|
- task = rpc_run_task(NFS_CLIENT(inode), RPC_TASK_ASYNC, &nfs4_delegreturn_ops, data);
|
|
|
+ task_setup_data.callback_data = data;
|
|
|
+ task = rpc_run_task(&task_setup_data);
|
|
|
if (IS_ERR(task))
|
|
|
return PTR_ERR(task);
|
|
|
status = nfs4_wait_for_completion_rpc_task(task);
|
|
@@ -3260,6 +3284,11 @@ static struct rpc_task *nfs4_do_unlck(struct file_lock *fl,
|
|
|
struct nfs_seqid *seqid)
|
|
|
{
|
|
|
struct nfs4_unlockdata *data;
|
|
|
+ struct rpc_task_setup task_setup_data = {
|
|
|
+ .rpc_client = NFS_CLIENT(lsp->ls_state->inode),
|
|
|
+ .callback_ops = &nfs4_locku_ops,
|
|
|
+ .flags = RPC_TASK_ASYNC,
|
|
|
+ };
|
|
|
|
|
|
/* Ensure this is an unlock - when canceling a lock, the
|
|
|
* canceled lock is passed in, and it won't be an unlock.
|
|
@@ -3272,7 +3301,8 @@ static struct rpc_task *nfs4_do_unlck(struct file_lock *fl,
|
|
|
return ERR_PTR(-ENOMEM);
|
|
|
}
|
|
|
|
|
|
- return rpc_run_task(NFS_CLIENT(lsp->ls_state->inode), RPC_TASK_ASYNC, &nfs4_locku_ops, data);
|
|
|
+ task_setup_data.callback_data = data;
|
|
|
+ return rpc_run_task(&task_setup_data);
|
|
|
}
|
|
|
|
|
|
static int nfs4_proc_unlck(struct nfs4_state *state, int cmd, struct file_lock *request)
|
|
@@ -3438,6 +3468,11 @@ static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *f
|
|
|
{
|
|
|
struct nfs4_lockdata *data;
|
|
|
struct rpc_task *task;
|
|
|
+ struct rpc_task_setup task_setup_data = {
|
|
|
+ .rpc_client = NFS_CLIENT(state->inode),
|
|
|
+ .callback_ops = &nfs4_lock_ops,
|
|
|
+ .flags = RPC_TASK_ASYNC,
|
|
|
+ };
|
|
|
int ret;
|
|
|
|
|
|
dprintk("%s: begin!\n", __FUNCTION__);
|
|
@@ -3449,8 +3484,8 @@ static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *f
|
|
|
data->arg.block = 1;
|
|
|
if (reclaim != 0)
|
|
|
data->arg.reclaim = 1;
|
|
|
- task = rpc_run_task(NFS_CLIENT(state->inode), RPC_TASK_ASYNC,
|
|
|
- &nfs4_lock_ops, data);
|
|
|
+ task_setup_data.callback_data = data;
|
|
|
+ task = rpc_run_task(&task_setup_data);
|
|
|
if (IS_ERR(task))
|
|
|
return PTR_ERR(task);
|
|
|
ret = nfs4_wait_for_completion_rpc_task(task);
|