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()
6 From: Chuck Lever <chuck.lever@oracle.com>
8 [ Upstream commit e72f9bc006c08841c46d27747a4debc747a8fe13 ]
10 Refactor for legibility.
12 Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
14 fs/nfsd/nfs4proc.c | 37 ++++++++++++++++++++++---------------
15 1 file changed, 22 insertions(+), 15 deletions(-)
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)
25 +static void nfsd4_send_cb_offload(struct nfsd4_copy *copy)
27 + struct nfsd4_copy *cb_copy;
29 + cb_copy = kzalloc(sizeof(struct nfsd4_copy), GFP_KERNEL);
33 + refcount_set(&cb_copy->refcount, 1);
34 + memcpy(&cb_copy->cp_res, ©->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, ©->fh, sizeof(copy->fh));
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, ©->cp_res.cb_stateid,
42 + ©->fh, copy->cp_count, copy->nfserr);
43 + nfsd4_run_cb(&cb_copy->cp_cb);
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)
52 struct nfsd4_copy *copy = (struct nfsd4_copy *)data;
53 - struct nfsd4_copy *cb_copy;
55 if (nfsd4_ssc_is_inter(copy)) {
57 @@ -1787,20 +1807,7 @@ static int nfsd4_do_async_copy(void *data)
61 - cb_copy = kzalloc(sizeof(struct nfsd4_copy), GFP_KERNEL);
64 - refcount_set(&cb_copy->refcount, 1);
65 - memcpy(&cb_copy->cp_res, ©->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, ©->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, ©->cp_res.cb_stateid,
72 - ©->fh, copy->cp_count, copy->nfserr);
73 - nfsd4_run_cb(&cb_copy->cp_cb);
75 + nfsd4_send_cb_offload(copy);
76 cleanup_async_copy(copy);