OSDN Git Service

NFS4: move ctx into nfs4_run_open_task
authorFred Isaman <fred.isaman@gmail.com>
Mon, 19 Sep 2016 14:06:49 +0000 (10:06 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Thu, 31 May 2018 19:03:11 +0000 (15:03 -0400)
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>
fs/nfs/nfs4proc.c

index 4ff8f18..556c126 100644 (file)
@@ -86,7 +86,6 @@
        | ATTR_MTIME_SET)
 
 struct nfs4_opendata;
-static int _nfs4_proc_open(struct nfs4_opendata *data);
 static int _nfs4_recover_proc_open(struct nfs4_opendata *data);
 static int nfs4_do_fsinfo(struct nfs_server *, struct nfs_fh *, struct nfs_fsinfo *);
 static void nfs_fixup_referral_attributes(struct nfs_fattr *fattr);
@@ -2327,7 +2326,8 @@ static const struct rpc_call_ops nfs4_open_ops = {
        .rpc_release = nfs4_open_release,
 };
 
-static int nfs4_run_open_task(struct nfs4_opendata *data, int isrecover)
+static int nfs4_run_open_task(struct nfs4_opendata *data,
+                             struct nfs_open_context *ctx)
 {
        struct inode *dir = d_inode(data->dir);
        struct nfs_server *server = NFS_SERVER(dir);
@@ -2350,14 +2350,16 @@ static int nfs4_run_open_task(struct nfs4_opendata *data, int isrecover)
        };
        int status;
 
-       nfs4_init_sequence(&o_arg->seq_args, &o_res->seq_res, 1, isrecover);
        kref_get(&data->kref);
        data->rpc_done = false;
        data->rpc_status = 0;
        data->cancelled = false;
        data->is_recover = false;
-       if (isrecover)
+       if (!ctx) {
+               nfs4_init_sequence(&o_arg->seq_args, &o_res->seq_res, 1, 1);
                data->is_recover = true;
+       } else
+               nfs4_init_sequence(&o_arg->seq_args, &o_res->seq_res, 1, 0);
        task = rpc_run_task(&task_setup_data);
        if (IS_ERR(task))
                return PTR_ERR(task);
@@ -2378,7 +2380,7 @@ static int _nfs4_recover_proc_open(struct nfs4_opendata *data)
        struct nfs_openres *o_res = &data->o_res;
        int status;
 
-       status = nfs4_run_open_task(data, 1);
+       status = nfs4_run_open_task(data, NULL);
        if (status != 0 || !data->rpc_done)
                return status;
 
@@ -2439,7 +2441,8 @@ static int nfs4_opendata_access(struct rpc_cred *cred,
 /*
  * Note: On error, nfs4_proc_open will free the struct nfs4_opendata
  */
-static int _nfs4_proc_open(struct nfs4_opendata *data)
+static int _nfs4_proc_open(struct nfs4_opendata *data,
+                          struct nfs_open_context *ctx)
 {
        struct inode *dir = d_inode(data->dir);
        struct nfs_server *server = NFS_SERVER(dir);
@@ -2447,7 +2450,7 @@ static int _nfs4_proc_open(struct nfs4_opendata *data)
        struct nfs_openres *o_res = &data->o_res;
        int status;
 
-       status = nfs4_run_open_task(data, 0);
+       status = nfs4_run_open_task(data, ctx);
        if (!data->rpc_done)
                return status;
        if (status != 0) {
@@ -2798,7 +2801,7 @@ static int _nfs4_open_and_get_state(struct nfs4_opendata *opendata,
 
        seq = raw_seqcount_begin(&sp->so_reclaim_seqcount);
 
-       ret = _nfs4_proc_open(opendata);
+       ret = _nfs4_proc_open(opendata, ctx);
        if (ret != 0)
                goto out;