• Jens Axboe's avatar
    task_work: unconditionally run task_work from get_signal() · 35d0b389
    Jens Axboe authored
    Song reported a boot regression in a kvm image with 5.11-rc, and bisected
    it down to the below patch. Debugging this issue, turns out that the boot
    stalled when a task is waiting on a pipe being released. As we no longer
    run task_work from get_signal() unless it's queued with TWA_SIGNAL, the
    task goes idle without running the task_work. This prevents ->release()
    from being called on the pipe, which another boot task is waiting on.
    
    For now, re-instate the unconditional task_work run from get_signal().
    For 5.12, we'll collapse TWA_RESUME and TWA_SIGNAL, as it no longer
    makes sense to have a distinction between the two. This will turn
    task_work notification into a simple boolean, whether to notify or not.
    
    Fixes: 98b89b64 ("signal: kill JOBCTL_TASK_WORK")
    Reported-by: default avatarSong Liu <songliubraving@fb.com>
    Tested-by: default avatarJohn Stultz <john.stultz@linaro.org>
    Tested-by: default avatarDouglas Anderson <dianders@chromium.org>
    Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # LLVM/Clang version 11.0.1
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    35d0b389
signal.c 120 KB