summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorHui Su <sh_def@163.com>2026-10-11 10:50:19 +0900
committerPeter Zijlstra <peterz@infradead.org>2026-10-13 13:51:28 +0200
commit159b172906110f736fdbd7af8a21d0e0b469f671 (patch)
tree3d134a3d8c5268ff4e588c8b71f81ae13a22c6c5 /kernel
parentcc459ecd9388d96dc20404b157f5a4eedb66c355 (diff)
downloadlinux-159b172906110f736fdbd7af8a21d0e0b469f671.tar.gz
linux-159b172906110f736fdbd7af8a21d0e0b469f671.zip
sched/wait: Avoid modifying entry on failed priority registration
add_wait_queue_priority_exclusive() sets WQ_FLAG_EXCLUSIVE and WQ_FLAG_PRIORITY before checking whether another priority waiter is already present. Thus, when registration fails with -EBUSY, the entry is left unqueued but with modified flags. There is no need to modify the entry before the failure check. Move the flag update after the check so that a rejected registration does not unnecessarily alter the entry. Signed-off-by: Hui Su <sh_def@163.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Sean Christopherson <seanjc@google.com> Link: https://patch.msgid.link/20261011015019.4056529-1-sh_def@163.com
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched/wait.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c
index 477e4bf9c01e..f8d6d8b9d03e 100644
--- a/kernel/sched/wait.c
+++ b/kernel/sched/wait.c
@@ -54,14 +54,13 @@ int add_wait_queue_priority_exclusive(struct wait_queue_head *wq_head,
{
struct list_head *head = &wq_head->head;
- wq_entry->flags |= WQ_FLAG_EXCLUSIVE | WQ_FLAG_PRIORITY;
-
guard(spinlock_irqsave)(&wq_head->lock);
if (!list_empty(head) &&
(list_first_entry(head, typeof(*wq_entry), entry)->flags & WQ_FLAG_PRIORITY))
return -EBUSY;
+ wq_entry->flags |= WQ_FLAG_EXCLUSIVE | WQ_FLAG_PRIORITY;
list_add(&wq_entry->entry, head);
return 0;
}