The patch titled Subject: eventpoll: fix missing wakeup for ovflist in ep_poll_callback has been removed from the -mm tree. Its filename was eventpoll-fix-missing-wakeup-for-ovflist-in-ep_poll_callback-v2.patch This patch was dropped because it was folded into eventpoll-fix-missing-wakeup-for-ovflist-in-ep_poll_callback.patch ------------------------------------------------------ From: Khazhismel Kumykov <khazhy@xxxxxxxxxx> Subject: eventpoll: fix missing wakeup for ovflist in ep_poll_callback use if/elif instead of goto + cleanup suggested by Roman Link: http://lkml.kernel.org/r/20200424190039.192373-1-khazhy@xxxxxxxxxx Fixes: 339ddb53d373 ("fs/epoll: remove unnecessary wakeups of nested epoll") Signed-off-by: Khazhismel Kumykov <khazhy@xxxxxxxxxx> Reviewed-by: Roman Penyaev <rpenyaev@xxxxxxx> Cc: Alexander Viro <viro@xxxxxxxxxxxxxxxxxx> Cc: Heiher <r@xxxxxx> Cc: Jason Baron <jbaron@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/eventpoll.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) --- a/fs/eventpoll.c~eventpoll-fix-missing-wakeup-for-ovflist-in-ep_poll_callback-v2 +++ a/fs/eventpoll.c @@ -1171,6 +1171,10 @@ static inline bool chain_epi_lockless(st { struct eventpoll *ep = epi->ep; + /* Fast preliminary check */ + if (epi->next != EP_UNACTIVE_PTR) + return false; + /* Check that the same epi has not been just chained from another CPU */ if (cmpxchg(&epi->next, EP_UNACTIVE_PTR, NULL) != EP_UNACTIVE_PTR) return false; @@ -1237,19 +1241,14 @@ static int ep_poll_callback(wait_queue_e * chained in ep->ovflist and requeued later on. */ if (READ_ONCE(ep->ovflist) != EP_UNACTIVE_PTR) { - if (epi->next == EP_UNACTIVE_PTR && - chain_epi_lockless(epi)) + if (chain_epi_lockless(epi)) + ep_pm_stay_awake_rcu(epi); + } else if (!ep_is_linked(epi)) { + /* In the usual case, add event to ready list. */ + if (list_add_tail_lockless(&epi->rdllink, &ep->rdllist)) ep_pm_stay_awake_rcu(epi); - goto out_wakeup_unlock; - } - - /* If this file is already in the ready list we exit soon */ - if (!ep_is_linked(epi) && - list_add_tail_lockless(&epi->rdllink, &ep->rdllist)) { - ep_pm_stay_awake_rcu(epi); } -out_wakeup_unlock: /* * Wake up ( if active ) both the eventpoll wait list and the ->poll() * wait list. _ Patches currently in -mm which might be from khazhy@xxxxxxxxxx are eventpoll-fix-missing-wakeup-for-ovflist-in-ep_poll_callback.patch