NFSD: Add nfsd4_send_cb_offload()
authorChuck Lever <chuck.lever@oracle.com>
Wed, 27 Jul 2022 18:41:12 +0000 (14:41 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Sat, 30 Jul 2022 00:16:59 +0000 (20:16 -0400)
Refactor for legibility.

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

index cbdbe1e9de89e345953cd5f70d1d1480bc3a7301..baea3d39d5ce7d28c63e8816f67a5d787e76def2 100644 (file)
@@ -1763,6 +1763,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
@@ -1773,7 +1794,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;
@@ -1795,20 +1815,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;
 }