]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
io_uring/eventfd: abstract out ev_fd put helper
authorJens Axboe <axboe@kernel.dk>
Sat, 21 Sep 2024 07:59:47 +0000 (01:59 -0600)
committerJens Axboe <axboe@kernel.dk>
Tue, 29 Oct 2024 19:43:26 +0000 (13:43 -0600)
We call this in two spot, have a helper for it. In preparation for
extending this part.

Link: https://lore.kernel.org/r/20240921080307.185186-2-axboe@kernel.dk
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/eventfd.c

index e37fddd5d9ce8e7279a4d30def8001e87b65a192..8b628ab6bbffeb8796eeeaac3a02ef7c228f2cf0 100644 (file)
@@ -41,6 +41,12 @@ static void io_eventfd_do_signal(struct rcu_head *rcu)
                io_eventfd_free(rcu);
 }
 
+static void io_eventfd_put(struct io_ev_fd *ev_fd)
+{
+       if (refcount_dec_and_test(&ev_fd->refs))
+               call_rcu(&ev_fd->rcu, io_eventfd_free);
+}
+
 void io_eventfd_signal(struct io_ring_ctx *ctx)
 {
        struct io_ev_fd *ev_fd = NULL;
@@ -77,8 +83,7 @@ void io_eventfd_signal(struct io_ring_ctx *ctx)
                }
        }
 out:
-       if (refcount_dec_and_test(&ev_fd->refs))
-               call_rcu(&ev_fd->rcu, io_eventfd_free);
+       io_eventfd_put(ev_fd);
 }
 
 void io_eventfd_flush_signal(struct io_ring_ctx *ctx)
@@ -152,8 +157,7 @@ int io_eventfd_unregister(struct io_ring_ctx *ctx)
        if (ev_fd) {
                ctx->has_evfd = false;
                rcu_assign_pointer(ctx->io_ev_fd, NULL);
-               if (refcount_dec_and_test(&ev_fd->refs))
-                       call_rcu(&ev_fd->rcu, io_eventfd_free);
+               io_eventfd_put(ev_fd);
                return 0;
        }