nfsd: Pass the nfsd_file as arguments to nfsd4_clone_file_range()
authorTrond Myklebust <trondmy@gmail.com>
Mon, 6 Jan 2020 18:40:32 +0000 (13:40 -0500)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 22 Jan 2020 21:25:40 +0000 (16:25 -0500)
Needed in order to fix exclusion w.r.t. writes.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4proc.c
fs/nfsd/vfs.c
fs/nfsd/vfs.h

index a2baf53..634f32d 100644 (file)
@@ -1085,8 +1085,8 @@ nfsd4_clone(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
        if (status)
                goto out;
 
-       status = nfsd4_clone_file_range(src->nf_file, clone->cl_src_pos,
-                       dst->nf_file, clone->cl_dst_pos, clone->cl_count,
+       status = nfsd4_clone_file_range(src, clone->cl_src_pos,
+                       dst, clone->cl_dst_pos, clone->cl_count,
                        EX_ISSYNC(cstate->current_fh.fh_export));
 
        nfsd_file_put(dst);
index 0a048df..7950f2e 100644 (file)
@@ -530,9 +530,11 @@ __be32 nfsd4_set_nfs4_label(struct svc_rqst *rqstp, struct svc_fh *fhp,
 }
 #endif
 
-__be32 nfsd4_clone_file_range(struct file *src, u64 src_pos, struct file *dst,
-               u64 dst_pos, u64 count, bool sync)
+__be32 nfsd4_clone_file_range(struct nfsd_file *nf_src, u64 src_pos,
+               struct nfsd_file *nf_dst, u64 dst_pos, u64 count, bool sync)
 {
+       struct file *src = nf_src->nf_file;
+       struct file *dst = nf_dst->nf_file;
        loff_t cloned;
 
        cloned = vfs_clone_file_range(src, src_pos, dst, dst_pos, count, 0);
index 0174e95..a91cd79 100644 (file)
@@ -57,8 +57,9 @@ __be32          nfsd4_set_nfs4_label(struct svc_rqst *, struct svc_fh *,
                    struct xdr_netobj *);
 __be32         nfsd4_vfs_fallocate(struct svc_rqst *, struct svc_fh *,
                                    struct file *, loff_t, loff_t, int);
-__be32         nfsd4_clone_file_range(struct file *, u64, struct file *,
-                                      u64, u64, bool);
+__be32         nfsd4_clone_file_range(struct nfsd_file *nf_src, u64 src_pos,
+                                      struct nfsd_file *nf_dst, u64 dst_pos,
+                                      u64 count, bool sync);
 #endif /* CONFIG_NFSD_V4 */
 __be32         nfsd_create_locked(struct svc_rqst *, struct svc_fh *,
                                char *name, int len, struct iattr *attrs,