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.c26
1 files changed, 9 insertions, 17 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 8feaf232f2e4..3cc75445a68d 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -295,18 +295,6 @@ static void nfs4_opendata_free(struct nfs4_opendata *p)
295 } 295 }
296} 296}
297 297
298/* Helper for asynchronous RPC calls */
299static int nfs4_call_async(struct rpc_clnt *clnt,
300 const struct rpc_call_ops *tk_ops, void *calldata)
301{
302 struct rpc_task *task;
303
304 if (!(task = rpc_new_task(clnt, RPC_TASK_ASYNC, tk_ops, calldata)))
305 return -ENOMEM;
306 rpc_execute(task);
307 return 0;
308}
309
310static int nfs4_wait_for_completion_rpc_task(struct rpc_task *task) 298static int nfs4_wait_for_completion_rpc_task(struct rpc_task *task)
311{ 299{
312 sigset_t oldset; 300 sigset_t oldset;
@@ -1218,6 +1206,8 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state)
1218{ 1206{
1219 struct nfs_server *server = NFS_SERVER(state->inode); 1207 struct nfs_server *server = NFS_SERVER(state->inode);
1220 struct nfs4_closedata *calldata; 1208 struct nfs4_closedata *calldata;
1209 struct nfs4_state_owner *sp = state->owner;
1210 struct rpc_task *task;
1221 int status = -ENOMEM; 1211 int status = -ENOMEM;
1222 1212
1223 calldata = kmalloc(sizeof(*calldata), GFP_KERNEL); 1213 calldata = kmalloc(sizeof(*calldata), GFP_KERNEL);
@@ -1237,14 +1227,16 @@ int nfs4_do_close(struct path *path, struct nfs4_state *state)
1237 calldata->path.mnt = mntget(path->mnt); 1227 calldata->path.mnt = mntget(path->mnt);
1238 calldata->path.dentry = dget(path->dentry); 1228 calldata->path.dentry = dget(path->dentry);
1239 1229
1240 status = nfs4_call_async(server->client, &nfs4_close_ops, calldata); 1230 task = rpc_run_task(server->client, RPC_TASK_ASYNC, &nfs4_close_ops, calldata);
1241 if (status == 0) 1231 if (IS_ERR(task))
1242 goto out; 1232 return PTR_ERR(task);
1243 1233 rpc_put_task(task);
1244 nfs_free_seqid(calldata->arg.seqid); 1234 return 0;
1245out_free_calldata: 1235out_free_calldata:
1246 kfree(calldata); 1236 kfree(calldata);
1247out: 1237out:
1238 nfs4_put_open_state(state);
1239 nfs4_put_state_owner(sp);
1248 return status; 1240 return status;
1249} 1241}
1250 1242