• F
    blockjob: Allow nested pause · 751ebd76
    Fam Zheng 提交于
    This patch changes block_job_pause to increase the pause counter and
    block_job_resume to decrease it.
    
    The counter will allow calling block_job_pause/block_job_resume
    unconditionally on a job when we need to suspend the IO temporarily.
    
    From now on, each block_job_resume must be paired with a block_job_pause
    to keep the counter balanced.
    
    The user pause from QMP or HMP will only trigger block_job_pause once
    until it's resumed, this is achieved by adding a user_paused flag in
    BlockJob.
    
    One occurrence of block_job_resume in mirror_complete is replaced with
    block_job_enter which does what is necessary.
    
    In block_job_cancel, the cancel flag is good enough to instruct
    coroutines to quit loop, so use block_job_enter to replace the unpaired
    block_job_resume.
    
    Upon block job IO error, user is notified about the entering to the
    pause state, so this pause belongs to user pause, set the flag
    accordingly and expect a matching QMP resume.
    
    [Extended doc comments as suggested by Paolo Bonzini
    <pbonzini@redhat.com>.
    --Stefan]
    Signed-off-by: NFam Zheng <famz@redhat.com>
    Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
    Reviewed-by: NPaolo Bonzini <pbonzini@redhat.com>
    Reviewed-by: NAlberto Garcia <berto@igalia.com>
    Message-id: 1428069921-2957-2-git-send-email-famz@redhat.com
    Signed-off-by: NStefan Hajnoczi <stefanha@redhat.com>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    751ebd76
blockdev.c 87.9 KB