The patch titled Subject: fs-epoll-deal-with-wait_queue-only-once-fix has been added to the -mm tree. Its filename is fs-epoll-deal-with-wait_queue-only-once-fix.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/fs-epoll-deal-with-wait_queue-only-once-fix.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/fs-epoll-deal-with-wait_queue-only-once-fix.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Subject: fs-epoll-deal-with-wait_queue-only-once-fix restore code to original position, fix and reflow comment Cc: Davidlohr Bueso <dave@xxxxxxxxxxxx> Cc: Davidlohr Bueso <dbueso@xxxxxxx> Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx> Cc: Jason Baron <jbaron@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/eventpoll.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) --- a/fs/eventpoll.c~fs-epoll-deal-with-wait_queue-only-once-fix +++ a/fs/eventpoll.c @@ -1787,15 +1787,6 @@ fetch_events: if (eavail) goto send_events; - if (!waiter) { - waiter = true; - init_waitqueue_entry(&wait, current); - - spin_lock_irq(&ep->wq.lock); - __add_wait_queue_exclusive(&ep->wq, &wait); - spin_unlock_irq(&ep->wq.lock); - } - /* * Busy poll timed out. Drop NAPI ID for now, we can add * it back in when we have moved a socket with a valid NAPI @@ -1804,10 +1795,18 @@ fetch_events: ep_reset_busy_poll_napi_id(ep); /* - * We don't have any available event to return to the caller. - * We need to sleep here, and we will be wake up by - * ep_poll_callback() when events will become available. + * We don't have any available event to return to the caller. We need + * to sleep here, and we will be woken by ep_poll_callback() when events + * become available. */ + if (!waiter) { + waiter = true; + init_waitqueue_entry(&wait, current); + + spin_lock_irq(&ep->wq.lock); + __add_wait_queue_exclusive(&ep->wq, &wait); + spin_unlock_irq(&ep->wq.lock); + } for (;;) { /* _ Patches currently in -mm which might be from akpm@xxxxxxxxxxxxxxxxxxxx are arm-arch-arm-include-asm-pageh-needs-personalityh.patch mm.patch mm-slab-remove-unnecessary-unlikely-fix.patch mm-slub-record-final-state-of-slub-action-in-deactivate_slab-fix.patch mm-page_owner-clamp-read-count-to-page_size-fix.patch mm-hotplug-optimize-clear_hwpoisoned_pages-fix.patch mm-ksm-do-not-block-on-page-lock-when-searching-stable-tree-fix.patch mm-memory_hotplug-print-reason-for-the-offlining-failure-fix.patch mm-convert-totalram_pages-and-totalhigh_pages-variables-to-atomic-checkpatch-fixes.patch memory_hotplug-free-pages-as-higher-order-fix.patch fs-epoll-deal-with-wait_queue-only-once-fix.patch exec-separate-mm_anonpages-and-rlimit_stack-accounting-checkpatch-fixes.patch ipc-allow-boot-time-extension-of-ipcmni-from-32k-to-8m-checkpatch-fixes.patch kernel-forkc-export-kernel_thread-to-modules.patch slab-leaks3-default-y.patch