]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - queue-5.15/nfsd-refactor-nfsd4_do_copy.patch
Fixes for 5.15
[thirdparty/kernel/stable-queue.git] / queue-5.15 / nfsd-refactor-nfsd4_do_copy.patch
1 From d1dd9b32997e5cd7bcd03fa961a346a5ff5131cf Mon Sep 17 00:00:00 2001
2 From: Sasha Levin <sashal@kernel.org>
3 Date: Wed, 27 Jul 2022 14:40:59 -0400
4 Subject: NFSD: Refactor nfsd4_do_copy()
5
6 From: Chuck Lever <chuck.lever@oracle.com>
7
8 [ Upstream commit 3b7bf5933cada732783554edf0dc61283551c6cf ]
9
10 Refactor: Now that nfsd4_do_copy() no longer calls the cleanup
11 helpers, plumb the use of struct file pointers all the way down to
12 _nfsd_copy_file_range().
13
14 Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
15 ---
16 fs/nfsd/nfs4proc.c | 22 ++++++++++++++--------
17 1 file changed, 14 insertions(+), 8 deletions(-)
18
19 diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
20 index 10130f0b088ef..24c7d5e6c8c33 100644
21 --- a/fs/nfsd/nfs4proc.c
22 +++ b/fs/nfsd/nfs4proc.c
23 @@ -1661,10 +1661,10 @@ static void nfsd4_init_copy_res(struct nfsd4_copy *copy, bool sync)
24 gen_boot_verifier(&copy->cp_res.wr_verifier, copy->cp_clp->net);
25 }
26
27 -static ssize_t _nfsd_copy_file_range(struct nfsd4_copy *copy)
28 +static ssize_t _nfsd_copy_file_range(struct nfsd4_copy *copy,
29 + struct file *dst,
30 + struct file *src)
31 {
32 - struct file *dst = copy->nf_dst->nf_file;
33 - struct file *src = copy->nf_src->nf_file;
34 errseq_t since;
35 ssize_t bytes_copied = 0;
36 u64 bytes_total = copy->cp_count;
37 @@ -1701,12 +1701,15 @@ static ssize_t _nfsd_copy_file_range(struct nfsd4_copy *copy)
38 return bytes_copied;
39 }
40
41 -static __be32 nfsd4_do_copy(struct nfsd4_copy *copy, bool sync)
42 +static __be32 nfsd4_do_copy(struct nfsd4_copy *copy,
43 + struct file *src, struct file *dst,
44 + bool sync)
45 {
46 __be32 status;
47 ssize_t bytes;
48
49 - bytes = _nfsd_copy_file_range(copy);
50 + bytes = _nfsd_copy_file_range(copy, dst, src);
51 +
52 /* for async copy, we ignore the error, client can always retry
53 * to get the error
54 */
55 @@ -1771,11 +1774,13 @@ static int nfsd4_do_async_copy(void *data)
56 /* ss_mnt will be unmounted by the laundromat */
57 goto do_callback;
58 }
59 - copy->nfserr = nfsd4_do_copy(copy, 0);
60 + copy->nfserr = nfsd4_do_copy(copy, copy->nf_src->nf_file,
61 + copy->nf_dst->nf_file, false);
62 nfsd4_cleanup_inter_ssc(copy->ss_mnt, copy->nf_src->nf_file,
63 copy->nf_dst);
64 } else {
65 - copy->nfserr = nfsd4_do_copy(copy, 0);
66 + copy->nfserr = nfsd4_do_copy(copy, copy->nf_src->nf_file,
67 + copy->nf_dst->nf_file, false);
68 nfsd4_cleanup_intra_ssc(copy->nf_src, copy->nf_dst);
69 }
70
71 @@ -1853,7 +1858,8 @@ nfsd4_copy(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
72 wake_up_process(async_copy->copy_task);
73 status = nfs_ok;
74 } else {
75 - status = nfsd4_do_copy(copy, 1);
76 + status = nfsd4_do_copy(copy, copy->nf_src->nf_file,
77 + copy->nf_dst->nf_file, true);
78 nfsd4_cleanup_intra_ssc(copy->nf_src, copy->nf_dst);
79 }
80 out:
81 --
82 2.43.0
83