Commit e8c85328 authored by Soheil Hassas Yeganeh's avatar Soheil Hassas Yeganeh Committed by Linus Torvalds
Browse files

epoll: pull all code between fetch_events and send_event into the loop

This is a no-op change which simplifies the follow up patches.

Link: https://lkml.kernel.org/r/20201106231635.3528496-7-soheil.kdev@gmail.com


Signed-off-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
Reviewed-by: default avatarKhazhismel Kumykov <khazhy@google.com>
Cc: Guantao Liu <guantaol@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 1493c47f
Loading
Loading
Loading
Loading
+21 −20
Original line number Diff line number Diff line
@@ -1774,6 +1774,7 @@ static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events,
	}

fetch_events:
	do {
		eavail = ep_events_available(ep);
		if (!eavail)
			eavail = ep_busy_loop(ep, timed_out);
@@ -1781,7 +1782,6 @@ fetch_events:
		if (eavail)
			goto send_events;

	do {
		if (signal_pending(current))
			return -EINTR;

@@ -1830,21 +1830,22 @@ fetch_events:
		 * carefully under lock, below.
		 */
		eavail = 1;
	} while (0);

		if (!list_empty_careful(&wait.entry)) {
			write_lock_irq(&ep->lock);
			/*
		 * If the thread timed out and is not on the wait queue, it
		 * means that the thread was woken up after its timeout expired
		 * before it could reacquire the lock. Thus, when wait.entry is
		 * empty, it needs to harvest events.
			 * If the thread timed out and is not on the wait queue,
			 * it means that the thread was woken up after its
			 * timeout expired before it could reacquire the lock.
			 * Thus, when wait.entry is empty, it needs to harvest
			 * events.
			 */
			if (timed_out)
				eavail = list_empty(&wait.entry);
			__remove_wait_queue(&ep->wq, &wait);
			write_unlock_irq(&ep->lock);
		}
	} while (0);

send_events:
	/*