mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 07:33:19 +02:00
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>
This commit is contained in:
parent
6b47d35d4d
commit
38d2035601
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user