]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blobdiff - net/sunrpc/sched.c
SUNRPC: allow the caller of rpc_run_task to preallocate the struct rpc_task
[mirror_ubuntu-focal-kernel.git] / net / sunrpc / sched.c
index fa53a88b2c5bd4afd3a5869aaf4eb647c6776ac4..c03e7bf6e9bc673f90f62032faf77578acc58882 100644 (file)
@@ -885,16 +885,20 @@ static void rpc_free_task(struct rcu_head *rcu)
  */
 struct rpc_task *rpc_new_task(const struct rpc_task_setup *setup_data)
 {
-       struct rpc_task *task;
-
-       task = rpc_alloc_task();
-       if (!task)
-               goto out;
+       struct rpc_task *task = setup_data->task;
+       unsigned short flags = 0;
+
+       if (task == NULL) {
+               task = rpc_alloc_task();
+               if (task == NULL)
+                       goto out;
+               flags = RPC_TASK_DYNAMIC;
+       }
 
        rpc_init_task(task, setup_data);
 
+       task->tk_flags |= flags;
        dprintk("RPC:       allocated task %p\n", task);
-       task->tk_flags |= RPC_TASK_DYNAMIC;
 out:
        return task;
 }