FAILED: patch "[PATCH] io_uring/msg_ring: fix flagging remote execution" failed to apply to 6.1-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Possible dependencies:
56d8e3180c06 ("io_uring/msg_ring: fix flagging remote execution") 423d5081d045 ("io_uring/msg_ring: move double lock/unlock helpers higher up") 761c61c15903 ("io_uring/msg_ring: flag target ring as having task_work, if needed") 6d043ee1164c ("io_uring: do msg_ring in target task via tw") 172113101641 ("io_uring: extract a io_msg_install_complete helper") 11373026f296 ("io_uring: get rid of double locking")4c979eaefa43 ("io_uring: improve io_double_lock_ctx fail handling") b529c96a896b ("io_uring: remove overflow param from io_post_aux_cqe") a77ab745f28d ("io_uring: make io_fill_cqe_aux static")9b8c54755a2b ("io_uring: add io_aux_cqe which allows deferred completion") 931147ddfa6e ("io_uring: allow defer completion for aux posted cqes") 1bec951c3809 ("io_uring: iopoll protect complete_post")fa18fa2272c7 ("io_uring: inline __io_req_complete_put()")f9d567c75ec2 ("io_uring: inline __io_req_complete_post()") e2ad599d1ed3 ("io_uring: allow multishot recv CQEs to overflow") 515e26961295 ("io_uring: revert "io_uring fix multishot accept ordering"")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 56d8e3180c065c9b78ed77afcd0cf99677a4e22f Mon Sep 17 00:00:00 2001
From: Pavel Begunkov <[email protected]>
Date: Fri, 20 Jan 2023 16:38:05 +0000
Subject: [PATCH] io_uring/msg_ring: fix flagging remote execution
There is a couple of problems with queueing a tw in io_msg_ring_data() for remote execution. First, once we queue it the target ring can go away and so setting IORING_SQ_TASKRUN there is not safe. Secondly, the userspace might not expect IORING_SQ_TASKRUN.
Extract a helper and uniformly use TWA_SIGNAL without TWA_SIGNAL_NO_IPI tricks for now, just as it was done in the original patch.
io_uring/msg_ring.c +23 -17
@@ -58,6 +58,25 @@ void io_msg_ring_cleanup(struct io_kiocb *req) msg->src_file =NULL ; } +static inline bool io_msg_need_remote (struct io_ring_ctx *target_ctx) +{ +if (!target_ctx->task_complete) +return false; +return current != target_ctx->submitter_task; +} + +static int io_msg_exec_remote (struct io_kiocb *req,task_work_func_t func) +{ +struct io_ring_ctx *ctx = req->file->private_data; + struct io_msg *msg = io_kiocb_to_cmd(req, struct io_msg); + +init_task_work (&msg->tw, func); +if (task_work_add (ctx->submitter_task, &msg->tw,TWA_SIGNAL )) +return -EOWNERDEAD ; + +return IOU_ISSUE_SKIP_COMPLETE ; +} +static void io_msg_tw_complete (struct callback_head *head) { struct io_msg *msg = container_of(head, struct io_msg, tw);
@@ -96,15 +115,8 @@ static int io_msg_ring_data(struct io_kiocb *req, unsigned int issue_flags)if (msg->src_fd || msg->dst_fd || msg->flags)return -EINVAL ; -if (target_ctx->task_complete && current != target_ctx->submitter_task) { -init_task_work (&msg->tw, io_msg_tw_complete); -if (task_work_add (target_ctx->submitter_task, &msg->tw, -TWA_SIGNAL_NO_IPI )) -return -EOWNERDEAD ; - -atomic_or (IORING_SQ_TASKRUN , &target_ctx->rings->sq_flags); -return IOU_ISSUE_SKIP_COMPLETE ; - } +if (io_msg_need_remote (target_ctx)) +return io_msg_exec_remote (req, io_msg_tw_complete); ret = -EOVERFLOW ;if (target_ctx->flags &IORING_SETUP_IOPOLL ) {
@@ -202,14 +214,8 @@ static int io_msg_send_fd(struct io_kiocb *req, unsigned int issue_flags) req->flags |=REQ_F_NEED_CLEANUP ; } -if (target_ctx->task_complete && current != target_ctx->submitter_task) { -init_task_work (&msg->tw, io_msg_tw_fd_complete); -if (task_work_add (target_ctx->submitter_task, &msg->tw, -TWA_SIGNAL )) -return -EOWNERDEAD ; - -return IOU_ISSUE_SKIP_COMPLETE ; - } +if (io_msg_need_remote (target_ctx)) +return io_msg_exec_remote (req, io_msg_tw_fd_complete);return io_msg_install_complete (req, issue_flags); }
Quoted 5 lines · On 1/22/23 13:13, [email protected] wrote:
The patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Apparently, it's not needed in stable
[...]
Quoted 20 lines
------------------ original commit in Linus's tree ------------------
From
56d8e3180c065c9b78ed77afcd0cf99677a4e22fMon Sep 17 00:00:00 2001
From: Pavel Begunkov <[email protected]>
Date: Fri, 20 Jan 2023 16:38:05 +0000
Subject: [PATCH]io_uring/msg_ring: fix flagging remote executionThere is a couple of problems with queueing a tw in
io_msg_ring_data()for remote execution. First, once we queue it the target ring can go away and so settingIORING_SQ_TASKRUNthere is not safe. Secondly, the userspace might not expectIORING_SQ_TASKRUN.Extract a helper and uniformly use
TWA_SIGNALwithoutTWA_SIGNAL_NO_IPItricks for now, just as it was done in the original patch.Fixes 6d043ee1164ca ("io_uring: do msg_ring in target task via tw")Signed-off-by Pavel Begunkov <[email protected]>Signed-off-by Jens Axboe <[email protected]>
Signature · 1 line
Pavel Begunkov