epoll: ep_autoremove_wake_function should use list_del_init_careful
[ Upstream commit 2192bba03d80f829233bfa34506b428f71e531e7 ] autoremove_wake_function uses list_del_init_careful, so should epoll's more aggressive variant. It only doesn't because it was copied from an older wait.c rather than the most recent. [bsegall@google.com: add comment] Link: https://lkml.kernel.org/r/xm26bki0ulsr.fsf_-_@google.com Link: https://lkml.kernel.org/r/xm26pm6hvfer.fsf@google.com Fixes: a16ceb139610 ("epoll: autoremove wakers even more aggressively") Signed-off-by: Ben Segall <bsegall@google.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christian Brauner <brauner@kernel.org> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
e77e5481d5
commit
e14e9cc588
@ -1814,7 +1814,11 @@ static int ep_autoremove_wake_function(struct wait_queue_entry *wq_entry,
|
|||||||
{
|
{
|
||||||
int ret = default_wake_function(wq_entry, mode, sync, key);
|
int ret = default_wake_function(wq_entry, mode, sync, key);
|
||||||
|
|
||||||
list_del_init(&wq_entry->entry);
|
/*
|
||||||
|
* Pairs with list_empty_careful in ep_poll, and ensures future loop
|
||||||
|
* iterations see the cause of this wakeup.
|
||||||
|
*/
|
||||||
|
list_del_init_careful(&wq_entry->entry);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user