Rename lock_two_rings() to io_lock_two_rings() and export. This will be used when registering a src ifq owned by one ring as a proxy in another ring. During this process both rings need to be locked in a deterministic order, similar to the current user io_clone_buffers(). Signed-off-by: David Wei --- io_uring/rsrc.c | 4 ++-- io_uring/rsrc.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c index d787c16dc1c3..d245b7592eee 100644 --- a/io_uring/rsrc.c +++ b/io_uring/rsrc.c @@ -1148,7 +1148,7 @@ int io_import_reg_buf(struct io_kiocb *req, struct iov_iter *iter, } /* Lock two rings at once. The rings must be different! */ -static void lock_two_rings(struct io_ring_ctx *ctx1, struct io_ring_ctx *ctx2) +void io_lock_two_rings(struct io_ring_ctx *ctx1, struct io_ring_ctx *ctx2) { if (ctx1 > ctx2) swap(ctx1, ctx2); @@ -1299,7 +1299,7 @@ int io_register_clone_buffers(struct io_ring_ctx *ctx, void __user *arg) src_ctx = file->private_data; if (src_ctx != ctx) { mutex_unlock(&ctx->uring_lock); - lock_two_rings(ctx, src_ctx); + io_lock_two_rings(ctx, src_ctx); if (src_ctx->submitter_task && src_ctx->submitter_task != current) { diff --git a/io_uring/rsrc.h b/io_uring/rsrc.h index a3ca6ba66596..b002c4a5a8cd 100644 --- a/io_uring/rsrc.h +++ b/io_uring/rsrc.h @@ -70,6 +70,7 @@ int io_import_reg_vec(int ddir, struct iov_iter *iter, int io_prep_reg_iovec(struct io_kiocb *req, struct iou_vec *iv, const struct iovec __user *uvec, size_t uvec_segs); +void io_lock_two_rings(struct io_ring_ctx *ctx1, struct io_ring_ctx *ctx2); int io_register_clone_buffers(struct io_ring_ctx *ctx, void __user *arg); int io_sqe_buffers_unregister(struct io_ring_ctx *ctx); int io_sqe_buffers_register(struct io_ring_ctx *ctx, void __user *arg, -- 2.47.3