aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFred Isaman <fred.isaman@gmail.com>2016-09-19 10:06:49 -0400
committerTrond Myklebust <trond.myklebust@hammerspace.com>2018-05-31 15:03:11 -0400
commit3b65a30df9b3f1cb336d9421892e7860c0f999c0 (patch)
treeb0d5028563be55edd0f7a541a5b3bf6839c8ecba
parent808ba32abe84b74abef5eb7507b8031f65b8221d (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.c19
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
88struct nfs4_opendata; 88struct nfs4_opendata;
89static int _nfs4_proc_open(struct nfs4_opendata *data);
90static int _nfs4_recover_proc_open(struct nfs4_opendata *data); 89static int _nfs4_recover_proc_open(struct nfs4_opendata *data);
91static int nfs4_do_fsinfo(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *); 90static int nfs4_do_fsinfo(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
92static void nfs_fixup_referral_attributes(struct nfs_fattr *fattr); 91static 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
2330static int nfs4_run_open_task(struct nfs4_opendata *data, int isrecover) 2329static 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 */
2442static int _nfs4_proc_open(struct nfs4_opendata *data) 2444static 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