diff --git a/fs/eventpoll.c b/fs/eventpoll.c
index 13d4c3d50412..5ce1ea1f452b 100644
--- a/fs/eventpoll.c
+++ b/fs/eventpoll.c
@@ -1817,7 +1817,11 @@ static int ep_autoremove_wake_function(struct wait_queue_entry *wq_entry,
 {
 	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;
 }