diff options
| author | Jens Axboe <axboe@kernel.dk> | 2025-02-19 10:22:25 -0700 |
|---|---|---|
| committer | Christian Brauner <brauner@kernel.org> | 2025-02-20 10:18:37 +0100 |
| commit | 38d203560118a673018df5892a6555bb0aba7762 (patch) | |
| tree | dbbe533ff7b0f071c99031b512c6c599ae565e10 /fs/eventpoll.c | |
| parent | 6b47d35d4d9e6a3fc7b456bb7f84aea807df5b11 (diff) | |
eventpoll: abstract out ep_try_send_events() helper
In preparation for reusing this helper in another epoll setup helper,
abstract it out.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/r/20250219172552.1565603-3-axboe@kernel.dk
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'fs/eventpoll.c')
| -rw-r--r-- | fs/eventpoll.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/fs/eventpoll.c b/fs/eventpoll.c index 565bf451df82..14466765b85d 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c @@ -1980,6 +1980,22 @@ static int ep_autoremove_wake_function(struct wait_queue_entry *wq_entry, return ret; } +static int ep_try_send_events(struct eventpoll *ep, + struct epoll_event __user *events, int maxevents) +{ + int res; + + /* + * Try to transfer events to user space. In case we get 0 events and + * there's still timeout left over, we go trying again in search of + * more luck. + */ + res = ep_send_events(ep, events, maxevents); + if (res > 0) + ep_suspend_napi_irqs(ep); + return res; +} + /** * ep_poll - Retrieves ready events, and delivers them to the caller-supplied * event buffer. @@ -2031,17 +2047,9 @@ static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events, while (1) { if (eavail) { - /* - * Try to transfer events to user space. In case we get - * 0 events and there's still timeout left over, we go - * trying again in search of more luck. - */ - res = ep_send_events(ep, events, maxevents); - if (res) { - if (res > 0) - ep_suspend_napi_irqs(ep); + res = ep_try_send_events(ep, events, maxevents); + if (res) return res; - } } if (timed_out) |