vhost: return task creation error instead of NULL
authorKeith Busch <kbusch@kernel.org>
Thu, 27 Feb 2025 23:06:30 +0000 (15:06 -0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Sat, 1 Mar 2025 07:52:52 +0000 (02:52 -0500)
Lets callers distinguish why the vhost task creation failed. No one
currently cares why it failed, so no real runtime change from this
patch, but that will not be the case for long.

Signed-off-by: Keith Busch <kbusch@kernel.org>
Message-ID: <20250227230631.303431-2-kbusch@meta.com>
Reviewed-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/mmu/mmu.c
drivers/vhost/vhost.c
kernel/vhost_task.c

index d4ac4a1f8b81b1ae9db44160f657a446c04cc316..18ca1ea6dc240f5e6ccf92dca63e6293611607d6 100644 (file)
@@ -7471,7 +7471,7 @@ static void kvm_mmu_start_lpage_recovery(struct once *once)
                                      kvm_nx_huge_page_recovery_worker_kill,
                                      kvm, "kvm-nx-lpage-recovery");
 
-       if (!nx_thread)
+       if (IS_ERR(nx_thread))
                return;
 
        vhost_task_start(nx_thread);
index 9ac25d08f473e832f375aad71d9811b21555bbdb..63612faeab72715d884c53e526f47f5588750f2b 100644 (file)
@@ -666,7 +666,7 @@ static struct vhost_worker *vhost_worker_create(struct vhost_dev *dev)
 
        vtsk = vhost_task_create(vhost_run_work_list, vhost_worker_killed,
                                 worker, name);
-       if (!vtsk)
+       if (IS_ERR(vtsk))
                goto free_worker;
 
        mutex_init(&worker->mutex);
index 8800f5acc00717b956ea0915c976e647a010aed7..2ef2e1b8009165d05d96935737204706dbdedbd1 100644 (file)
@@ -133,7 +133,7 @@ struct vhost_task *vhost_task_create(bool (*fn)(void *),
 
        vtsk = kzalloc(sizeof(*vtsk), GFP_KERNEL);
        if (!vtsk)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
        init_completion(&vtsk->exited);
        mutex_init(&vtsk->exit_mutex);
        vtsk->data = arg;
@@ -145,7 +145,7 @@ struct vhost_task *vhost_task_create(bool (*fn)(void *),
        tsk = copy_process(NULL, 0, NUMA_NO_NODE, &args);
        if (IS_ERR(tsk)) {
                kfree(vtsk);
-               return NULL;
+               return ERR_PTR(PTR_ERR(tsk));
        }
 
        vtsk->task = tsk;