diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index 3957d4f584a3..9b18ddb3c0de 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -2207,8 +2207,6 @@ static __cold void io_ring_ctx_free(struct io_ring_ctx *ctx) io_sq_thread_finish(ctx); mutex_lock(&ctx->uring_lock); - io_sqe_buffers_unregister(ctx); - io_sqe_files_unregister(ctx); io_unregister_zcrx(ctx); io_cqring_overflow_kill(ctx); io_eventfd_unregister(ctx); @@ -2474,6 +2472,9 @@ static __cold void io_ring_ctx_wait_and_kill(struct io_ring_ctx *ctx) xa_for_each(&ctx->personalities, index, creds) io_unregister_personality(ctx, index); io_terminate_zcrx(ctx); + /* Drop these now, rather than async, to unpin the files */ + io_sqe_buffers_unregister(ctx); + io_sqe_files_unregister(ctx); mutex_unlock(&ctx->uring_lock); /*