]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
eventpoll: abstract out ep_try_send_events() helper
authorJens Axboe <axboe@kernel.dk>
Wed, 19 Feb 2025 17:22:25 +0000 (10:22 -0700)
committerChristian Brauner <brauner@kernel.org>
Thu, 20 Feb 2025 09:18:37 +0000 (10:18 +0100)
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>
fs/eventpoll.c

index 565bf451df8232cf4cebceeb7eb2cdd20024565e..14466765b85d6dddbd0a67b446cd7efd92e7c2f0 100644 (file)
@@ -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)