]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
io_uring/zcrx: move io_unregister_zcrx_ifqs() down
authorDavid Wei <dw@davidwei.uk>
Tue, 4 Nov 2025 22:44:57 +0000 (14:44 -0800)
committerJens Axboe <axboe@kernel.dk>
Thu, 6 Nov 2025 23:23:21 +0000 (16:23 -0700)
In preparation for removing the ref on ctx->refs held by an ifq and
removing io_shutdown_zcrx_ifqs(), move io_unregister_zcrx_ifqs() down
such that it can call io_zcrx_scrub().

Signed-off-by: David Wei <dw@davidwei.uk>
Reviewed-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/zcrx.c

index 774efbce8cb6b8e104c5a8085ab50289ae81403a..b3f3d55d2f63bdd65ed090e26f9357f04289cdbe 100644 (file)
@@ -662,28 +662,6 @@ ifq_free:
        return ret;
 }
 
-void io_unregister_zcrx_ifqs(struct io_ring_ctx *ctx)
-{
-       struct io_zcrx_ifq *ifq;
-
-       lockdep_assert_held(&ctx->uring_lock);
-
-       while (1) {
-               scoped_guard(mutex, &ctx->mmap_lock) {
-                       unsigned long id = 0;
-
-                       ifq = xa_find(&ctx->zcrx_ctxs, &id, ULONG_MAX, XA_PRESENT);
-                       if (ifq)
-                               xa_erase(&ctx->zcrx_ctxs, id);
-               }
-               if (!ifq)
-                       break;
-               io_zcrx_ifq_free(ifq);
-       }
-
-       xa_destroy(&ctx->zcrx_ctxs);
-}
-
 static struct net_iov *__io_zcrx_get_free_niov(struct io_zcrx_area *area)
 {
        unsigned niov_idx;
@@ -749,6 +727,28 @@ void io_shutdown_zcrx_ifqs(struct io_ring_ctx *ctx)
        }
 }
 
+void io_unregister_zcrx_ifqs(struct io_ring_ctx *ctx)
+{
+       struct io_zcrx_ifq *ifq;
+
+       lockdep_assert_held(&ctx->uring_lock);
+
+       while (1) {
+               scoped_guard(mutex, &ctx->mmap_lock) {
+                       unsigned long id = 0;
+
+                       ifq = xa_find(&ctx->zcrx_ctxs, &id, ULONG_MAX, XA_PRESENT);
+                       if (ifq)
+                               xa_erase(&ctx->zcrx_ctxs, id);
+               }
+               if (!ifq)
+                       break;
+               io_zcrx_ifq_free(ifq);
+       }
+
+       xa_destroy(&ctx->zcrx_ctxs);
+}
+
 static inline u32 io_zcrx_rqring_entries(struct io_zcrx_ifq *ifq)
 {
        u32 entries;