/* rpc_run_task - Allocate a new RPC task, then run rpc_execute against it @task_setup_data: pointer to task initialisation data  */
struct rpc_task* rpc_run_task(const struct rpc_task_setup *task_setup_data)
/* rpc_run_task - Allocate a new RPC task, then run rpc_execute against it @task_setup_data: pointer to task initialisation data  */
struct rpc_task* rpc_run_task(const struct rpc_task_setup *task_setup_data)
{
	struct rpc_task *task, *ret;
	task = rpc_new_task(task_setup_data);
	if (task == NULL) {
		rpc_release_calldata(task_setup_data->callback_ops,
				task_setup_data->callback_data);
		ret = ERR_PTR(-ENOMEM);
		goto out;
	}
	if (task->tk_status != 0) {
		ret = ERR_PTR(task->tk_status);
		rpc_put_task(task);
		goto out;
	}
	atomic_inc(&task->tk_count);
	rpc_execute(task);
	ret = task;
out:
	return ret;
}