mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 17:57:38 -04:00
sched_ext: Record an error on errno-only sub-enable failure
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: ebeca1f930 ("sched_ext: Introduce cgroup sub-sched support")
Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Andrea Righi <arighi@nvidia.com>
This commit is contained in:
@@ -7746,6 +7746,12 @@ static void scx_sub_enable_workfn(struct kthread_work *work)
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user