]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
sched_ext: Record an error on errno-only sub-enable failure
authorTejun Heo <tj@kernel.org>
Thu, 9 Jul 2026 21:08:13 +0000 (11:08 -1000)
committerTejun Heo <tj@kernel.org>
Thu, 9 Jul 2026 21:08:13 +0000 (11:08 -1000)
scx_sub_enable_workfn() has several failure paths that only return an errno
(e.g. -ENOMEM from an allocation) and jump to err_disable without calling
scx_error(). scx_flush_disable_work() runs the disable, and thus ops.exit(),
only when an error has been recorded, so an errno-only failure leaves the
half-initialized sub-scheduler linked.

Record an error at the err_disable sink so every errno-only failure runs the
disable path.

Fixes: ebeca1f930ea ("sched_ext: Introduce cgroup sub-sched support")
Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Andrea Righi <arighi@nvidia.com>
kernel/sched/ext/ext.c

index 2dc6977d7984b1a39694d2edc68ae611e29a33f5..40cef77394ac42f090de1aa48ff9e658b10238e5 100644 (file)
@@ -7746,6 +7746,12 @@ err_unlock_and_disable:
        percpu_up_write(&scx_fork_rwsem);
 err_disable:
        mutex_unlock(&scx_enable_mutex);
+       /*
+        * Some enable failures only return an errno (e.g. -ENOMEM from an
+        * allocation) without calling scx_error(). Record it so
+        * scx_flush_disable_work() runs the disable and ops.exit() fires.
+        */
+       scx_error(sch, "scx_sub_enable() failed (%d)", ret);
        scx_flush_disable_work(sch);
        cmd->ret = 0;
 }