aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r--fs/nfs/nfs4proc.c49
1 files changed, 42 insertions, 7 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index a51a7537f3f6..ff2c5f83ce87 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -779,12 +779,18 @@ static int _nfs4_proc_open_confirm(struct nfs4_opendata *data)
779{ 779{
780 struct nfs_server *server = NFS_SERVER(data->dir->d_inode); 780 struct nfs_server *server = NFS_SERVER(data->dir->d_inode);
781 struct rpc_task *task; 781 struct rpc_task *task;
782 struct rpc_task_setup task_setup_data = {
783 .rpc_client = server->client,
784 .callback_ops = &nfs4_open_confirm_ops,
785 .callback_data = data,
786 .flags = RPC_TASK_ASYNC,
787 };
782 int status; 788 int status;
783 789
784 kref_get(&data->kref); 790 kref_get(&data->kref);
785 data->rpc_done = 0; 791 data->rpc_done = 0;
786 data->rpc_status = 0; 792 data->rpc_status = 0;
787 task = rpc_run_task(server->client, RPC_TASK_ASYNC, &nfs4_open_confirm_ops, data); 793 task = rpc_run_task(&task_setup_data);
788 if (IS_ERR(task)) 794 if (IS_ERR(task))
789 return PTR_ERR(task); 795 return PTR_ERR(task);
790 status = nfs4_wait_for_completion_rpc_task(task); 796 status = nfs4_wait_for_completion_rpc_task(task);
@@ -908,13 +914,19 @@ static int _nfs4_proc_open(struct nfs4_opendata *data)
908 struct nfs_openargs *o_arg = &data->o_arg; 914 struct nfs_openargs *o_arg = &data->o_arg;
909 struct nfs_openres *o_res = &data->o_res; 915 struct nfs_openres *o_res = &data->o_res;
910 struct rpc_task *task; 916 struct rpc_task *task;
917 struct rpc_task_setup task_setup_data = {
918 .rpc_client = server->client,
919 .callback_ops = &nfs4_open_ops,
920 .callback_data = data,
921 .flags = RPC_TASK_ASYNC,
922 };
911 int status; 923 int status;
912 924
913 kref_get(&data->kref); 925 kref_get(&data->kref);
914 data->rpc_done = 0; 926 data->rpc_done = 0;
915 data->rpc_status = 0; 927 data->rpc_status = 0;
916 data->cancelled = 0; 928 data->cancelled = 0;
917 task = rpc_run_task(server->client, RPC_TASK_ASYNC, &nfs4_open_ops, data); 929 task = rpc_run_task(&task_setup_data);
918 if (IS_ERR(task)) 930 if (IS_ERR(task))
919 return PTR_ERR(task); 931 return PTR_ERR(task);
920 status = nfs4_wait_for_completion_rpc_task(task); 932 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)
1309 struct nfs4_closedata *calldata; 1321 struct nfs4_closedata *calldata;
1310 struct nfs4_state_owner *sp = state->owner; 1322 struct nfs4_state_owner *sp = state->owner;
1311 struct rpc_task *task; 1323 struct rpc_task *task;
1324 struct rpc_task_setup task_setup_data = {
1325 .rpc_client = server->client,
1326 .callback_ops = &nfs4_close_ops,
1327 .flags = RPC_TASK_ASYNC,
1328 };
1312 int status = -ENOMEM; 1329 int status = -ENOMEM;
1313 1330
1314 calldata = kmalloc(sizeof(*calldata), GFP_KERNEL); 1331 calldata = kmalloc(sizeof(*calldata), GFP_KERNEL);
@@ -1328,7 +1345,8 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state, int wait)
1328 calldata->path.mnt = mntget(path->mnt); 1345 calldata->path.mnt = mntget(path->mnt);
1329 calldata->path.dentry = dget(path->dentry); 1346 calldata->path.dentry = dget(path->dentry);
1330 1347
1331 task = rpc_run_task(server->client, RPC_TASK_ASYNC, &nfs4_close_ops, calldata); 1348 task_setup_data.callback_data = calldata;
1349 task = rpc_run_task(&task_setup_data);
1332 if (IS_ERR(task)) 1350 if (IS_ERR(task))
1333 return PTR_ERR(task); 1351 return PTR_ERR(task);
1334 status = 0; 1352 status = 0;
@@ -3027,6 +3045,11 @@ static int _nfs4_proc_delegreturn(struct inode *inode, struct rpc_cred *cred, co
3027 struct nfs4_delegreturndata *data; 3045 struct nfs4_delegreturndata *data;
3028 struct nfs_server *server = NFS_SERVER(inode); 3046 struct nfs_server *server = NFS_SERVER(inode);
3029 struct rpc_task *task; 3047 struct rpc_task *task;
3048 struct rpc_task_setup task_setup_data = {
3049 .rpc_client = server->client,
3050 .callback_ops = &nfs4_delegreturn_ops,
3051 .flags = RPC_TASK_ASYNC,
3052 };
3030 int status; 3053 int status;
3031 3054
3032 data = kmalloc(sizeof(*data), GFP_KERNEL); 3055 data = kmalloc(sizeof(*data), GFP_KERNEL);
@@ -3043,7 +3066,8 @@ static int _nfs4_proc_delegreturn(struct inode *inode, struct rpc_cred *cred, co
3043 data->timestamp = jiffies; 3066 data->timestamp = jiffies;
3044 data->rpc_status = 0; 3067 data->rpc_status = 0;
3045 3068
3046 task = rpc_run_task(NFS_CLIENT(inode), RPC_TASK_ASYNC, &nfs4_delegreturn_ops, data); 3069 task_setup_data.callback_data = data;
3070 task = rpc_run_task(&task_setup_data);
3047 if (IS_ERR(task)) 3071 if (IS_ERR(task))
3048 return PTR_ERR(task); 3072 return PTR_ERR(task);
3049 status = nfs4_wait_for_completion_rpc_task(task); 3073 status = nfs4_wait_for_completion_rpc_task(task);
@@ -3260,6 +3284,11 @@ static struct rpc_task *nfs4_do_unlck(struct file_lock *fl,
3260 struct nfs_seqid *seqid) 3284 struct nfs_seqid *seqid)
3261{ 3285{
3262 struct nfs4_unlockdata *data; 3286 struct nfs4_unlockdata *data;
3287 struct rpc_task_setup task_setup_data = {
3288 .rpc_client = NFS_CLIENT(lsp->ls_state->inode),
3289 .callback_ops = &nfs4_locku_ops,
3290 .flags = RPC_TASK_ASYNC,
3291 };
3263 3292
3264 /* Ensure this is an unlock - when canceling a lock, the 3293 /* Ensure this is an unlock - when canceling a lock, the
3265 * canceled lock is passed in, and it won't be an unlock. 3294 * 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,
3272 return ERR_PTR(-ENOMEM); 3301 return ERR_PTR(-ENOMEM);
3273 } 3302 }
3274 3303
3275 return rpc_run_task(NFS_CLIENT(lsp->ls_state->inode), RPC_TASK_ASYNC, &nfs4_locku_ops, data); 3304 task_setup_data.callback_data = data;
3305 return rpc_run_task(&task_setup_data);
3276} 3306}
3277 3307
3278static int nfs4_proc_unlck(struct nfs4_state *state, int cmd, struct file_lock *request) 3308static 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
3438{ 3468{
3439 struct nfs4_lockdata *data; 3469 struct nfs4_lockdata *data;
3440 struct rpc_task *task; 3470 struct rpc_task *task;
3471 struct rpc_task_setup task_setup_data = {
3472 .rpc_client = NFS_CLIENT(state->inode),
3473 .callback_ops = &nfs4_lock_ops,
3474 .flags = RPC_TASK_ASYNC,
3475 };
3441 int ret; 3476 int ret;
3442 3477
3443 dprintk("%s: begin!\n", __FUNCTION__); 3478 dprintk("%s: begin!\n", __FUNCTION__);
@@ -3449,8 +3484,8 @@ static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *f
3449 data->arg.block = 1; 3484 data->arg.block = 1;
3450 if (reclaim != 0) 3485 if (reclaim != 0)
3451 data->arg.reclaim = 1; 3486 data->arg.reclaim = 1;
3452 task = rpc_run_task(NFS_CLIENT(state->inode), RPC_TASK_ASYNC, 3487 task_setup_data.callback_data = data;
3453 &nfs4_lock_ops, data); 3488 task = rpc_run_task(&task_setup_data);
3454 if (IS_ERR(task)) 3489 if (IS_ERR(task))
3455 return PTR_ERR(task); 3490 return PTR_ERR(task);
3456 ret = nfs4_wait_for_completion_rpc_task(task); 3491 ret = nfs4_wait_for_completion_rpc_task(task);