• Mike Christie's avatar
    vhost: Fix worker hangs due to missed wake up calls · 4b13cbef
    Mike Christie authored
    We can race where we have added work to the work_list, but
    vhost_task_fn has passed that check but not yet set us into
    TASK_INTERRUPTIBLE. wake_up_process will see us in TASK_RUNNING and
    just return.
    
    This bug was intoduced in commit f9010dbd ("fork, vhost: Use
    CLONE_THREAD to fix freezer/ps regression") when I moved the setting
    of TASK_INTERRUPTIBLE to simplfy the code and avoid get_signal from
    logging warnings about being in the wrong state. This moves the setting
    of TASK_INTERRUPTIBLE back to before we test if we need to stop the
    task to avoid a possible race there as well. We then have vhost_worker
    set TASK_RUNNING if it finds work similar to before.
    
    Fixes: f9010dbd ("fork, vhost: Use CLONE_THREAD to fix freezer/ps regression")
    Signed-off-by: default avatarMike Christie <michael.christie@oracle.com>
    Message-Id: <20230607192338.6041-3-michael.christie@oracle.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    4b13cbef
vhost.c 62.2 KB