]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - queue-5.15/nfsd-add-nfsd4_send_cb_offload.patch
Fixes for 5.15
[thirdparty/kernel/stable-queue.git] / queue-5.15 / nfsd-add-nfsd4_send_cb_offload.patch
1 From 31e4d0bfcafd1a8f322ebff8e6cd37862195287e Mon Sep 17 00:00:00 2001
2 From: Sasha Levin <sashal@kernel.org>
3 Date: Wed, 27 Jul 2022 14:41:12 -0400
4 Subject: NFSD: Add nfsd4_send_cb_offload()
5
6 From: Chuck Lever <chuck.lever@oracle.com>
7
8 [ Upstream commit e72f9bc006c08841c46d27747a4debc747a8fe13 ]
9
10 Refactor for legibility.
11
12 Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
13 ---
14 fs/nfsd/nfs4proc.c | 37 ++++++++++++++++++++++---------------
15 1 file changed, 22 insertions(+), 15 deletions(-)
16
17 diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
18 index f63c3c4c10ca7..be51338deda46 100644
19 --- a/fs/nfsd/nfs4proc.c
20 +++ b/fs/nfsd/nfs4proc.c
21 @@ -1755,6 +1755,27 @@ static void cleanup_async_copy(struct nfsd4_copy *copy)
22 nfs4_put_copy(copy);
23 }
24
25 +static void nfsd4_send_cb_offload(struct nfsd4_copy *copy)
26 +{
27 + struct nfsd4_copy *cb_copy;
28 +
29 + cb_copy = kzalloc(sizeof(struct nfsd4_copy), GFP_KERNEL);
30 + if (!cb_copy)
31 + return;
32 +
33 + refcount_set(&cb_copy->refcount, 1);
34 + memcpy(&cb_copy->cp_res, &copy->cp_res, sizeof(copy->cp_res));
35 + cb_copy->cp_clp = copy->cp_clp;
36 + cb_copy->nfserr = copy->nfserr;
37 + memcpy(&cb_copy->fh, &copy->fh, sizeof(copy->fh));
38 +
39 + nfsd4_init_cb(&cb_copy->cp_cb, cb_copy->cp_clp,
40 + &nfsd4_cb_offload_ops, NFSPROC4_CLNT_CB_OFFLOAD);
41 + trace_nfsd_cb_offload(copy->cp_clp, &copy->cp_res.cb_stateid,
42 + &copy->fh, copy->cp_count, copy->nfserr);
43 + nfsd4_run_cb(&cb_copy->cp_cb);
44 +}
45 +
46 /**
47 * nfsd4_do_async_copy - kthread function for background server-side COPY
48 * @data: arguments for COPY operation
49 @@ -1765,7 +1786,6 @@ static void cleanup_async_copy(struct nfsd4_copy *copy)
50 static int nfsd4_do_async_copy(void *data)
51 {
52 struct nfsd4_copy *copy = (struct nfsd4_copy *)data;
53 - struct nfsd4_copy *cb_copy;
54
55 if (nfsd4_ssc_is_inter(copy)) {
56 struct file *filp;
57 @@ -1787,20 +1807,7 @@ static int nfsd4_do_async_copy(void *data)
58 }
59
60 do_callback:
61 - cb_copy = kzalloc(sizeof(struct nfsd4_copy), GFP_KERNEL);
62 - if (!cb_copy)
63 - goto out;
64 - refcount_set(&cb_copy->refcount, 1);
65 - memcpy(&cb_copy->cp_res, &copy->cp_res, sizeof(copy->cp_res));
66 - cb_copy->cp_clp = copy->cp_clp;
67 - cb_copy->nfserr = copy->nfserr;
68 - memcpy(&cb_copy->fh, &copy->fh, sizeof(copy->fh));
69 - nfsd4_init_cb(&cb_copy->cp_cb, cb_copy->cp_clp,
70 - &nfsd4_cb_offload_ops, NFSPROC4_CLNT_CB_OFFLOAD);
71 - trace_nfsd_cb_offload(copy->cp_clp, &copy->cp_res.cb_stateid,
72 - &copy->fh, copy->cp_count, copy->nfserr);
73 - nfsd4_run_cb(&cb_copy->cp_cb);
74 -out:
75 + nfsd4_send_cb_offload(copy);
76 cleanup_async_copy(copy);
77 return 0;
78 }
79 --
80 2.43.0
81