stable-6.4 io_uring patches
Subsystems (2)
cover stable-6.4 io_uring patches
Recently failed to apply io_uring stable-6.4 patches.
Jens Axboe (1):
io_uring: cleanup io_aux_cqe() API
Pavel Begunkov (2):
io_uring/net: don't overflow multishot accept
io_uring/net: don't overflow multishot recv
io_uring/io_uring.c | 4 +++- io_uring/io_uring.h | 2 +- io_uring/net.c | 9 ++++----- io_uring/poll.c | 4 ++-- io_uring/timeout.c | 4 ++-- 5 files changed, 12 insertions(+), 11 deletions(-)
Signature · 1 line
2.41.0
PATCH 1/3 io_uring: cleanup io_aux_cqe() API
From: Jens Axboe <[email protected]>
[ upstream commit d86eaed185e9c6052d1ee2ca538f1936ff255887 ]
Everybody is passing in the request, so get rid of the io_ring_ctx and explicit user_data pass-in. Both the ctx and user_data can be deduced from the request at hand.
--- io_uring/io_uring.c | 4 +++- io_uring/io_uring.h | 2 +- io_uring/net.c | 9 ++++----- io_uring/poll.c | 4 ++-- io_uring/timeout.c | 4 ++-- 5 files changed, 12 insertions(+), 11 deletions(-)
io_uring/io_uring.c +3 -1
@@ -933,9 +933,11 @@ bool io_post_aux_cqe(struct io_ring_ctx *ctx, u64 user_data, s32 res, u32 cflagsreturn __io_post_aux_cqe (ctx, user_data, res, cflags, true); } -bool io_aux_cqe (struct io_ring_ctx *ctx,bool defer,u64 user_data,s32 res,u32 cflags, +bool io_aux_cqe (const struct io_kiocb *req,bool defer,s32 res,u32 cflags,bool allow_overflow) { +struct io_ring_ctx *ctx = req->ctx; +u64 user_data = req->cqe.user_data;struct io_uring_cqe *cqe;unsigned int length;
io_uring/io_uring.h +1 -1
@@ -47,7 +47,7 @@ int io_run_task_work_sig(struct io_ring_ctx *ctx);void io_req_defer_failed (struct io_kiocb *req,s32 res);void io_req_complete_post (struct io_kiocb *req,unsigned issue_flags);bool io_post_aux_cqe (struct io_ring_ctx *ctx,u64 user_data,s32 res,u32 cflags); -bool io_aux_cqe (struct io_ring_ctx *ctx,bool defer,u64 user_data,s32 res,u32 cflags, +bool io_aux_cqe (const struct io_kiocb *req,bool defer,s32 res,u32 cflags,bool allow_overflow);void __io_commit_cqring_flush (struct io_ring_ctx *ctx);
io_uring/net.c +4 -5
@@ -634,8 +634,8 @@ static inline bool io_recv_finish(struct io_kiocb *req, int *ret, }if (!mshot_finished) { -if (io_aux_cqe (req->ctx, issue_flags &IO_URING_F_COMPLETE_DEFER , - req->cqe.user_data, *ret, cflags |IORING_CQE_F_MORE , true)) { +if (io_aux_cqe (req, issue_flags &IO_URING_F_COMPLETE_DEFER , + *ret, cflags |IORING_CQE_F_MORE , true)) {io_recv_prep_retry (req);return false; }
@@ -1308,7 +1308,6 @@ int io_accept_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)int io_accept (struct io_kiocb *req,unsigned int issue_flags) { -struct io_ring_ctx *ctx = req->ctx; struct io_accept *accept = io_kiocb_to_cmd(req, struct io_accept);bool force_nonblock = issue_flags &IO_URING_F_NONBLOCK ;unsigned int file_flags = force_nonblock ?O_NONBLOCK :0 ;
@@ -1358,8 +1357,8 @@ int io_accept(struct io_kiocb *req, unsigned int issue_flags)if (ret <0 )return ret; -if (io_aux_cqe (ctx, issue_flags &IO_URING_F_COMPLETE_DEFER , - req->cqe.user_data, ret,IORING_CQE_F_MORE , true)) +if (io_aux_cqe (req, issue_flags &IO_URING_F_COMPLETE_DEFER , ret, +IORING_CQE_F_MORE , true)) goto retry;return -ECANCELED ;
io_uring/poll.c +2 -2
@@ -300,8 +300,8 @@ static int io_poll_check_events(struct io_kiocb *req, struct io_tw_state *ts)__poll_t mask =mangle_poll (req->cqe.res & req->apoll_events); -if (!io_aux_cqe (req->ctx, ts->locked, req->cqe.user_data, - mask,IORING_CQE_F_MORE , false)) { +if (!io_aux_cqe (req, ts->locked, mask, +IORING_CQE_F_MORE , false)) {io_req_set_res (req, mask,0 );return IOU_POLL_REMOVE_POLL_USE_RES ; }
io_uring/timeout.c +2 -2
@@ -73,8 +73,8 @@ static void io_timeout_complete(struct io_kiocb *req, struct io_tw_state *ts)if (!io_timeout_finish (timeout, data)) {bool filled; - filled =io_aux_cqe (ctx, ts->locked, req->cqe.user_data, -ETIME , -IORING_CQE_F_MORE , false); + filled =io_aux_cqe (req, ts->locked, -ETIME ,IORING_CQE_F_MORE , + false);if (filled) {/* re-arm timer */ spin_lock_irq (&ctx->timeout_lock);
Signature · 1 line
2.41.0
PATCH 2/3 io_uring/net: don't overflow multishot accept
In reply to Pavel Begunkov[ upstream commit 1bfed23349716a7811645336a7ce42c4b8f250bc ]
Don't allow overflowing multishot accept CQEs, we want to limit the grows of the overflow list.
--- io_uring/net.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
io_uring/net.c +1 -1
@@ -1358,7 +1358,7 @@ int io_accept(struct io_kiocb *req, unsigned int issue_flags)if (ret <0 )return ret;if (io_aux_cqe (req, issue_flags &IO_URING_F_COMPLETE_DEFER , ret, -IORING_CQE_F_MORE , true)) +IORING_CQE_F_MORE , false)) goto retry;return -ECANCELED ;
Signature · 1 line
2.41.0
PATCH 3/3 io_uring/net: don't overflow multishot recv
In reply to Pavel Begunkov[ upstream commit b2e74db55dd93d6db22a813c9a775b5dbf87c560 ]
Don't allow overflowing multishot recv CQEs, it might get out of hand, hurt performance, and in the worst case scenario OOM the task.
--- io_uring/net.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
io_uring/net.c +1 -1
@@ -635,7 +635,7 @@ static inline bool io_recv_finish(struct io_kiocb *req, int *ret,if (!mshot_finished) {if (io_aux_cqe (req, issue_flags &IO_URING_F_COMPLETE_DEFER , - *ret, cflags |IORING_CQE_F_MORE , true)) { + *ret, cflags |IORING_CQE_F_MORE , false)) {io_recv_prep_retry (req);return false; }
Signature · 1 line
2.41.0
Quoted 9 lines · Pavel Begunkov
Recently failed to apply
io_uringstable-6.4 patches.Jens Axboe (1):
io_uring: cleanupio_aux_cqe()APIPavel Begunkov (2):
io_uring/net: don't overflow multishot accept
io_uring/net: don't overflow multishot recv
Quoted 7 lines
io_uring/io_uring.c | 4 +++- io_uring/io_uring.h | 2 +- io_uring/net.c | 9 ++++----- io_uring/poll.c | 4 ++-- io_uring/timeout.c | 4 ++-- 5 files changed, 12 insertions(+), 11 deletions(-)
Thanks for this, but 6.4.y just went end-of-life.
I've queued up all the other backports you submitted, many thanks for those!
greg k-h