On 11/4/24 01:28, Pavel Begunkov wrote: > On 10/16/24 01:05, Bernd Schubert wrote: >> From: Pavel Begunkov <asml.silence@xxxxxxxxx> >> >> When the taks that submitted a request is dying, a task work for that >> request might get run by a kernel thread or even worse by a half >> dismantled task. We can't just cancel the task work without running the >> callback as the cmd might need to do some clean up, so pass a flag >> instead. If set, it's not safe to access any task resources and the >> callback is expected to cancel the cmd ASAP. >> >> Signed-off-by: Pavel Begunkov <asml.silence@xxxxxxxxx> >> --- >> include/linux/io_uring_types.h | 1 + >> io_uring/uring_cmd.c | 6 +++++- >> 2 files changed, 6 insertions(+), 1 deletion(-) >> >> diff --git a/include/linux/io_uring_types.h >> b/include/linux/io_uring_types.h >> index >> 7abdc09271245ff7de3fb9a905ca78b7561e37eb..869a81c63e4970576155043fce7fe656293d7f58 100644 >> --- a/include/linux/io_uring_types.h >> +++ b/include/linux/io_uring_types.h >> @@ -37,6 +37,7 @@ enum io_uring_cmd_flags { >> /* set when uring wants to cancel a previously issued command */ >> IO_URING_F_CANCEL = (1 << 11), >> IO_URING_F_COMPAT = (1 << 12), >> + IO_URING_F_TASK_DEAD = (1 << 13), >> }; >> struct io_wq_work_node { >> diff --git a/io_uring/uring_cmd.c b/io_uring/uring_cmd.c >> index >> 21ac5fb2d5f087e1174d5c94815d580972db6e3f..82c6001cc0696bbcbebb92153e1461f2a9aeebc3 100644 >> --- a/io_uring/uring_cmd.c >> +++ b/io_uring/uring_cmd.c >> @@ -119,9 +119,13 @@ EXPORT_SYMBOL_GPL(io_uring_cmd_mark_cancelable); >> static void io_uring_cmd_work(struct io_kiocb *req, struct >> io_tw_state *ts) >> { >> struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct >> io_uring_cmd); >> + unsigned int flags = IO_URING_F_COMPLETE_DEFER; >> + >> + if (req->task != current) >> + flags |= IO_URING_F_TASK_DEAD; > > Bernd, please don't change patches under my name without any > notice. This check is wrong, just stick to the original > > https://lore.kernel.org/io-uring/d2528a1c-3d7c-4124-953c-02e8e415529e@xxxxxxxxx/ > > In general if you need to change something, either stick your > name, so that I know it might be a derivative, or reflect it in > the commit message, e.g. > > Signed-off-by: initial author > [Person 2: changed this and that] > Signed-off-by: person 2 Oh sorry, for sure. I totally forgot to update the commit message. Somehow the initial version didn't trigger. I need to double check to see if there wasn't a testing issue on my side - going to check tomorrow. > > Also, a quick note that btrfs also need the patch, so it'll likely > get queued via either io_uring or btrfs trees for next. Thanks, good to know, one patch less to carry :) Thanks, Bernd