]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
kernel: don't call do_exit() for PF_IO_WORKER threads
authorJens Axboe <axboe@kernel.dk>
Fri, 26 Mar 2021 14:57:10 +0000 (08:57 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Jan 2023 10:39:23 +0000 (11:39 +0100)
[ Upstream commit 10442994ba195efef6fdcc0c3699e4633cb5161b ]

Right now we're never calling get_signal() from PF_IO_WORKER threads, but
in preparation for doing so, don't handle a fatal signal for them. The
workers have state they need to cleanup when exiting, so just return
instead of calling do_exit() on their behalf. The threads themselves will
detect a fatal signal and do proper shutdown.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
kernel/signal.c

index 845d4912b83aa5c326d3d113d9abb7fd2e5c09b8..fb5473724f5def96398f2ddbed997aba6a99bd98 100644 (file)
@@ -2754,6 +2754,14 @@ relock:
                        do_coredump(&ksig->info);
                }
 
+               /*
+                * PF_IO_WORKER threads will catch and exit on fatal signals
+                * themselves. They have cleanup that must be performed, so
+                * we cannot call do_exit() on their behalf.
+                */
+               if (current->flags & PF_IO_WORKER)
+                       goto out;
+
                /*
                 * Death signals, no core dump.
                 */
@@ -2761,7 +2769,7 @@ relock:
                /* NOTREACHED */
        }
        spin_unlock_irq(&sighand->siglock);
-
+out:
        ksig->sig = signr;
        return ksig->sig > 0;
 }