From: Markus Elfring <elfring@xxxxxxxxxxxxxxxxxxxxx> Date: Thu, 26 Sep 2024 14:51:07 +0200 A put_task_struct() call was immediately used after a return value check for a scx_ops_init_task() call in this function implementation. Thus call such a function only once instead directly before the check. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring <elfring@xxxxxxxxxxxxxxxxxxxxx> --- kernel/sched/ext.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c index 9ee5a9a261cc..4b89ea20e355 100644 --- a/kernel/sched/ext.c +++ b/kernel/sched/ext.c @@ -5091,8 +5091,8 @@ static int scx_ops_enable(struct sched_ext_ops *ops, struct bpf_link *link) spin_unlock_irq(&scx_tasks_lock); ret = scx_ops_init_task(p, task_group(p), false); + put_task_struct(p); if (ret) { - put_task_struct(p); spin_lock_irq(&scx_tasks_lock); scx_task_iter_exit(&sti); spin_unlock_irq(&scx_tasks_lock); @@ -5101,7 +5101,6 @@ static int scx_ops_enable(struct sched_ext_ops *ops, struct bpf_link *link) goto err_disable_unlock_all; } - put_task_struct(p); spin_lock_irq(&scx_tasks_lock); } scx_task_iter_exit(&sti); -- 2.46.1