FAILED: patch "[PATCH] io_uring: prevent sq_thread from spinning when it should stop" failed to apply to 5.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.4-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 7143b5ac5750f404ff3a594b34fdf3fc2f99f828 Mon Sep 17 00:00:00 2001
From: Stefano Garzarella <[email protected]>
Date: Fri, 21 Feb 2020 16:42:16 +0100
Subject: [PATCH] io_uring: prevent sq_thread from spinning when it should stop
This patch drops 'cur_mm' before calling cond_resched(), to prevent the sq_thread from spinning even when the user process is finished.
Before this patch, if the user process ended without closing the io_uring fd, the sq_thread continues to spin until the 'sq_thread_idle' timeout ends.
In the worst case where the 'sq_thread_idle' parameter is bigger than INT_MAX, the sq_thread will spin forever.
fs/io_uring.c +12 -12
@@ -5142,6 +5142,18 @@ static int io_sq_thread(void *data)* to enter the kernel to reap and flush events. */ if (!to_submit || ret == -EBUSY ) { +/* +* Drop cur_mm before scheduling, we can't hold it for +* long periods (or over schedule()). Do this before +* adding ourselves to the waitqueue, as the unuse/drop +* may sleep. +*/ +if (cur_mm) { +unuse_mm (cur_mm); +mmput (cur_mm); + cur_mm =NULL ; + } +/* * We're polling. If we're within the defined idle * period, then let us spin without work before going
@@ -5156,18 +5168,6 @@ static int io_sq_thread(void *data)continue ; } -/* -* Drop cur_mm before scheduling, we can't hold it for -* long periods (or over schedule()). Do this before -* adding ourselves to the waitqueue, as the unuse/drop -* may sleep. -*/ -if (cur_mm) { -unuse_mm (cur_mm); -mmput (cur_mm); - cur_mm =NULL ; - } -prepare_to_wait (&ctx->sqo_wait, &wait,TASK_INTERRUPTIBLE );
Quoted 4 lines · On Thu, Feb 27, 2020 at 11:12 AM <[email protected]> wrote:
The patch below does not apply to the 5.4-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, I'll send the backport for 5.4-stable tree.
Stefano
Quoted 69 lines
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From
7143b5ac5750f404ff3a594b34fdf3fc2f99f828Mon Sep 17 00:00:00 2001
From: Stefano Garzarella <[email protected]>
Date: Fri, 21 Feb 2020 16:42:16 +0100
Subject: [PATCH]io_uring: preventsq_threadfrom spinning when it should stopThis patch drops '
cur_mm' before callingcond_resched(), to prevent thesq_threadfrom spinning even when the user process is finished.Before this patch, if the user process ended without closing the
io_uringfd, thesq_threadcontinues to spin until the 'sq_thread_idle' timeout ends.In the worst case where the '
sq_thread_idle' parameter is bigger thanINT_MAX, thesq_threadwill spin forever.Fixes 6c271ce2f1d5 ("io_uring: add submission polling")Signed-off-by Stefano Garzarella <[email protected]>Signed-off-by Jens Axboe <[email protected]>fs/io_uring.c +12
-12@@ -5142,6 +5142,18 @@ static int io_sq_thread(void *data)* to enter the kernel to reap and flush events. */ if (!to_submit || ret == -EBUSY ) { +/* +* Drop cur_mm before scheduling, we can't hold it for +* long periods (or over schedule()). Do this before +* adding ourselves to the waitqueue, as the unuse/drop +* may sleep. +*/ +if (cur_mm) { +unuse_mm (cur_mm); +mmput (cur_mm); + cur_mm =NULL ; + } +/* * We're polling. If we're within the defined idle * period, then let us spin without work before going @@ -5156,18 +5168,6 @@ static int io_sq_thread(void *data)continue ; } -/* -* Drop cur_mm before scheduling, we can't hold it for -* long periods (or over schedule()). Do this before -* adding ourselves to the waitqueue, as the unuse/drop -* may sleep. -*/ -if (cur_mm) { -unuse_mm (cur_mm); -mmput (cur_mm); - cur_mm =NULL ; - } -prepare_to_wait (&ctx->sqo_wait, &wait,TASK_INTERRUPTIBLE );
Signature · 3 lines
Stefano Garzarella Software Engineer, Virt Team Red Hat