FAILED: patch "[PATCH] io_uring: fix io_prep_async_link locking" failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-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]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 44eff40a32e8f5228ae041006352e32638ad2368 Mon Sep 17 00:00:00 2001
From: Pavel Begunkov <[email protected]>
Date: Mon, 26 Jul 2021 14:14:31 +0100
Subject: [PATCH] io_uring: fix io_prep_async_link locking
io_prep_async_link() may be called after arming a linked timeout, automatically making it unsafe to traverse the linked list. Guard with completion_lock if there was a linked timeout.
Cc [email protected] # 5.9+
Signed-off-by Pavel Begunkov <[email protected]>
Link https://lore.kernel.org/r/93f7c617e2b4f012a2a175b3dab6bc2f27cebc48.1627304436.git.asml.silence@gmail.com open here
Signed-off-by Jens Axboe <[email protected]>
fs/io_uring.c +11 -2
@@ -1279,8 +1279,17 @@ static void io_prep_async_link(struct io_kiocb *req) {struct io_kiocb *cur; -io_for_each_link (cur, req) -io_prep_async_work (cur); +if (req->flags &REQ_F_LINK_TIMEOUT ) { +struct io_ring_ctx *ctx = req->ctx; + +spin_lock_irq (&ctx->completion_lock); +io_for_each_link (cur, req) +io_prep_async_work (cur); +spin_unlock_irq (&ctx->completion_lock); + }else { +io_for_each_link (cur, req) +io_prep_async_work (cur); + } }static void io_queue_async_work (struct io_kiocb *req)