]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
NFSD: Add nfsd4_send_cb_offload()
authorChuck Lever <chuck.lever@oracle.com>
Wed, 27 Jul 2022 18:41:12 +0000 (14:41 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Apr 2024 14:19:13 +0000 (16:19 +0200)
[ Upstream commit e72f9bc006c08841c46d27747a4debc747a8fe13 ]

Refactor for legibility.

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

index f63c3c4c10ca7d058eb2808a8ef1469ea7426015..be51338deda46bc05aeeea683891755d265a763b 100644 (file)
@@ -1755,6 +1755,27 @@ static void cleanup_async_copy(struct nfsd4_copy *copy)
        nfs4_put_copy(copy);
 }
 
+static void nfsd4_send_cb_offload(struct nfsd4_copy *copy)
+{
+       struct nfsd4_copy *cb_copy;
+
+       cb_copy = kzalloc(sizeof(struct nfsd4_copy), GFP_KERNEL);
+       if (!cb_copy)
+               return;
+
+       refcount_set(&cb_copy->refcount, 1);
+       memcpy(&cb_copy->cp_res, &copy->cp_res, sizeof(copy->cp_res));
+       cb_copy->cp_clp = copy->cp_clp;
+       cb_copy->nfserr = copy->nfserr;
+       memcpy(&cb_copy->fh, &copy->fh, sizeof(copy->fh));
+
+       nfsd4_init_cb(&cb_copy->cp_cb, cb_copy->cp_clp,
+                       &nfsd4_cb_offload_ops, NFSPROC4_CLNT_CB_OFFLOAD);
+       trace_nfsd_cb_offload(copy->cp_clp, &copy->cp_res.cb_stateid,
+                             &copy->fh, copy->cp_count, copy->nfserr);
+       nfsd4_run_cb(&cb_copy->cp_cb);
+}
+
 /**
  * nfsd4_do_async_copy - kthread function for background server-side COPY
  * @data: arguments for COPY operation
@@ -1765,7 +1786,6 @@ static void cleanup_async_copy(struct nfsd4_copy *copy)
 static int nfsd4_do_async_copy(void *data)
 {
        struct nfsd4_copy *copy = (struct nfsd4_copy *)data;
-       struct nfsd4_copy *cb_copy;
 
        if (nfsd4_ssc_is_inter(copy)) {
                struct file *filp;
@@ -1787,20 +1807,7 @@ static int nfsd4_do_async_copy(void *data)
        }
 
 do_callback:
-       cb_copy = kzalloc(sizeof(struct nfsd4_copy), GFP_KERNEL);
-       if (!cb_copy)
-               goto out;
-       refcount_set(&cb_copy->refcount, 1);
-       memcpy(&cb_copy->cp_res, &copy->cp_res, sizeof(copy->cp_res));
-       cb_copy->cp_clp = copy->cp_clp;
-       cb_copy->nfserr = copy->nfserr;
-       memcpy(&cb_copy->fh, &copy->fh, sizeof(copy->fh));
-       nfsd4_init_cb(&cb_copy->cp_cb, cb_copy->cp_clp,
-                       &nfsd4_cb_offload_ops, NFSPROC4_CLNT_CB_OFFLOAD);
-       trace_nfsd_cb_offload(copy->cp_clp, &copy->cp_res.cb_stateid,
-                             &copy->fh, copy->cp_count, copy->nfserr);
-       nfsd4_run_cb(&cb_copy->cp_cb);
-out:
+       nfsd4_send_cb_offload(copy);
        cleanup_async_copy(copy);
        return 0;
 }