diff options
author | Fred Isaman <fred.isaman@gmail.com> | 2016-09-19 10:06:49 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@hammerspace.com> | 2018-05-31 15:03:11 -0400 |
commit | 3b65a30df9b3f1cb336d9421892e7860c0f999c0 (patch) | |
tree | b0d5028563be55edd0f7a541a5b3bf6839c8ecba | |
parent | 808ba32abe84b74abef5eb7507b8031f65b8221d (diff) |
NFS4: move ctx into nfs4_run_open_task
Preparing to add conditional LAYOUTGET to OPEN rpc, the LAYOUTGET
will need the ctx info.
Signed-off-by: Fred Isaman <fred.isaman@gmail.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
-rw-r--r-- | fs/nfs/nfs4proc.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 4ff8f18ffc5c..556c1263999a 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -86,7 +86,6 @@ | |||
86 | | ATTR_MTIME_SET) | 86 | | ATTR_MTIME_SET) |
87 | 87 | ||
88 | struct nfs4_opendata; | 88 | struct nfs4_opendata; |
89 | static int _nfs4_proc_open(struct nfs4_opendata *data); | ||
90 | static int _nfs4_recover_proc_open(struct nfs4_opendata *data); | 89 | static int _nfs4_recover_proc_open(struct nfs4_opendata *data); |
91 | static int nfs4_do_fsinfo(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *); | 90 | static int nfs4_do_fsinfo(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *); |
92 | static void nfs_fixup_referral_attributes(struct nfs_fattr *fattr); | 91 | static void nfs_fixup_referral_attributes(struct nfs_fattr *fattr); |
@@ -2327,7 +2326,8 @@ static const struct rpc_call_ops nfs4_open_ops = { | |||
2327 | .rpc_release = nfs4_open_release, | 2326 | .rpc_release = nfs4_open_release, |
2328 | }; | 2327 | }; |
2329 | 2328 | ||
2330 | static int nfs4_run_open_task(struct nfs4_opendata *data, int isrecover) | 2329 | static int nfs4_run_open_task(struct nfs4_opendata *data, |
2330 | struct nfs_open_context *ctx) | ||
2331 | { | 2331 | { |
2332 | struct inode *dir = d_inode(data->dir); | 2332 | struct inode *dir = d_inode(data->dir); |
2333 | struct nfs_server *server = NFS_SERVER(dir); | 2333 | struct nfs_server *server = NFS_SERVER(dir); |
@@ -2350,14 +2350,16 @@ static int nfs4_run_open_task(struct nfs4_opendata *data, int isrecover) | |||
2350 | }; | 2350 | }; |
2351 | int status; | 2351 | int status; |
2352 | 2352 | ||
2353 | nfs4_init_sequence(&o_arg->seq_args, &o_res->seq_res, 1, isrecover); | ||
2354 | kref_get(&data->kref); | 2353 | kref_get(&data->kref); |
2355 | data->rpc_done = false; | 2354 | data->rpc_done = false; |
2356 | data->rpc_status = 0; | 2355 | data->rpc_status = 0; |
2357 | data->cancelled = false; | 2356 | data->cancelled = false; |
2358 | data->is_recover = false; | 2357 | data->is_recover = false; |
2359 | if (isrecover) | 2358 | if (!ctx) { |
2359 | nfs4_init_sequence(&o_arg->seq_args, &o_res->seq_res, 1, 1); | ||
2360 | data->is_recover = true; | 2360 | data->is_recover = true; |
2361 | } else | ||
2362 | nfs4_init_sequence(&o_arg->seq_args, &o_res->seq_res, 1, 0); | ||
2361 | task = rpc_run_task(&task_setup_data); | 2363 | task = rpc_run_task(&task_setup_data); |
2362 | if (IS_ERR(task)) | 2364 | if (IS_ERR(task)) |
2363 | return PTR_ERR(task); | 2365 | return PTR_ERR(task); |
@@ -2378,7 +2380,7 @@ static int _nfs4_recover_proc_open(struct nfs4_opendata *data) | |||
2378 | struct nfs_openres *o_res = &data->o_res; | 2380 | struct nfs_openres *o_res = &data->o_res; |
2379 | int status; | 2381 | int status; |
2380 | 2382 | ||
2381 | status = nfs4_run_open_task(data, 1); | 2383 | status = nfs4_run_open_task(data, NULL); |
2382 | if (status != 0 || !data->rpc_done) | 2384 | if (status != 0 || !data->rpc_done) |
2383 | return status; | 2385 | return status; |
2384 | 2386 | ||
@@ -2439,7 +2441,8 @@ static int nfs4_opendata_access(struct rpc_cred *cred, | |||
2439 | /* | 2441 | /* |
2440 | * Note: On error, nfs4_proc_open will free the struct nfs4_opendata | 2442 | * Note: On error, nfs4_proc_open will free the struct nfs4_opendata |
2441 | */ | 2443 | */ |
2442 | static int _nfs4_proc_open(struct nfs4_opendata *data) | 2444 | static int _nfs4_proc_open(struct nfs4_opendata *data, |
2445 | struct nfs_open_context *ctx) | ||
2443 | { | 2446 | { |
2444 | struct inode *dir = d_inode(data->dir); | 2447 | struct inode *dir = d_inode(data->dir); |
2445 | struct nfs_server *server = NFS_SERVER(dir); | 2448 | struct nfs_server *server = NFS_SERVER(dir); |
@@ -2447,7 +2450,7 @@ static int _nfs4_proc_open(struct nfs4_opendata *data) | |||
2447 | struct nfs_openres *o_res = &data->o_res; | 2450 | struct nfs_openres *o_res = &data->o_res; |
2448 | int status; | 2451 | int status; |
2449 | 2452 | ||
2450 | status = nfs4_run_open_task(data, 0); | 2453 | status = nfs4_run_open_task(data, ctx); |
2451 | if (!data->rpc_done) | 2454 | if (!data->rpc_done) |
2452 | return status; | 2455 | return status; |
2453 | if (status != 0) { | 2456 | if (status != 0) { |
@@ -2798,7 +2801,7 @@ static int _nfs4_open_and_get_state(struct nfs4_opendata *opendata, | |||
2798 | 2801 | ||
2799 | seq = raw_seqcount_begin(&sp->so_reclaim_seqcount); | 2802 | seq = raw_seqcount_begin(&sp->so_reclaim_seqcount); |
2800 | 2803 | ||
2801 | ret = _nfs4_proc_open(opendata); | 2804 | ret = _nfs4_proc_open(opendata, ctx); |
2802 | if (ret != 0) | 2805 | if (ret != 0) |
2803 | goto out; | 2806 | goto out; |
2804 | 2807 | ||