diff options
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r-- | fs/nfs/nfs4proc.c | 26 |
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 */ | ||
299 | static 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 | |||
310 | static int nfs4_wait_for_completion_rpc_task(struct rpc_task *task) | 298 | static 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; |
1245 | out_free_calldata: | 1235 | out_free_calldata: |
1246 | kfree(calldata); | 1236 | kfree(calldata); |
1247 | out: | 1237 | out: |
1238 | nfs4_put_open_state(state); | ||
1239 | nfs4_put_state_owner(sp); | ||
1248 | return status; | 1240 | return status; |
1249 | } | 1241 | } |
1250 | 1242 | ||