NFSD: Refactor nfsd4_do_copy()
authorChuck Lever <chuck.lever@oracle.com>
Wed, 27 Jul 2022 18:40:59 +0000 (14:40 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Sat, 30 Jul 2022 00:16:59 +0000 (20:16 -0400)
Refactor: Now that nfsd4_do_copy() no longer calls the cleanup
helpers, plumb the use of struct file pointers all the way down to
_nfsd_copy_file_range().

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfs4proc.c

index 8f85365..328e11d 100644 (file)
@@ -1670,10 +1670,10 @@ static void nfsd4_init_copy_res(struct nfsd4_copy *copy, bool sync)
        gen_boot_verifier(&copy->cp_res.wr_verifier, copy->cp_clp->net);
 }
 
-static ssize_t _nfsd_copy_file_range(struct nfsd4_copy *copy)
+static ssize_t _nfsd_copy_file_range(struct nfsd4_copy *copy,
+                                    struct file *dst,
+                                    struct file *src)
 {
-       struct file *dst = copy->nf_dst->nf_file;
-       struct file *src = copy->nf_src->nf_file;
        errseq_t since;
        ssize_t bytes_copied = 0;
        u64 bytes_total = copy->cp_count;
@@ -1709,12 +1709,15 @@ static ssize_t _nfsd_copy_file_range(struct nfsd4_copy *copy)
        return bytes_copied;
 }
 
-static __be32 nfsd4_do_copy(struct nfsd4_copy *copy, bool sync)
+static __be32 nfsd4_do_copy(struct nfsd4_copy *copy,
+                           struct file *src, struct file *dst,
+                           bool sync)
 {
        __be32 status;
        ssize_t bytes;
 
-       bytes = _nfsd_copy_file_range(copy);
+       bytes = _nfsd_copy_file_range(copy, dst, src);
+
        /* for async copy, we ignore the error, client can always retry
         * to get the error
         */
@@ -1779,11 +1782,13 @@ static int nfsd4_do_async_copy(void *data)
                        nfsd4_interssc_disconnect(copy->ss_mnt);
                        goto do_callback;
                }
-               copy->nfserr = nfsd4_do_copy(copy, 0);
+               copy->nfserr = nfsd4_do_copy(copy, copy->nf_src->nf_file,
+                                            copy->nf_dst->nf_file, false);
                nfsd4_cleanup_inter_ssc(copy->ss_mnt, copy->nf_src->nf_file,
                                        copy->nf_dst);
        } else {
-               copy->nfserr = nfsd4_do_copy(copy, 0);
+               copy->nfserr = nfsd4_do_copy(copy, copy->nf_src->nf_file,
+                                            copy->nf_dst->nf_file, false);
                nfsd4_cleanup_intra_ssc(copy->nf_src, copy->nf_dst);
        }
 
@@ -1861,7 +1866,8 @@ nfsd4_copy(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
                wake_up_process(async_copy->copy_task);
                status = nfs_ok;
        } else {
-               status = nfsd4_do_copy(copy, 1);
+               status = nfsd4_do_copy(copy, copy->nf_src->nf_file,
+                                      copy->nf_dst->nf_file, true);
                nfsd4_cleanup_intra_ssc(copy->nf_src, copy->nf_dst);
        }
 out: