Skip to content
  • Paolo Bonzini's avatar
    4c241cf5
    blockjob: introduce block_job_cancel_async, check iostatus invariants · 4c241cf5
    Paolo Bonzini authored
    
    
    The new functions helps respecting the invariant that the coroutine
    is entered with false user_resume, zero pause count and no error
    recorded in the iostatus.
    
    Resetting the iostatus is now common to all of block_job_cancel_async,
    block_job_user_resume and block_job_iostatus_reset, albeit with slight
    differences:
    
    - block_job_cancel_async resets the iostatus, and resumes the job if
    there was an error, but the coroutine is not restarted immediately.
    For example the caller may continue with a call to block_job_finish_sync.
    
    - block_job_user_resume resets the iostatus.  It wants to resume the job
    unconditionally, even if there was no error.
    
    - block_job_iostatus_reset doesn't resume the job at all.  Maybe that's
    a bug but it should be fixed separately.
    
    block_job_iostatus_reset does the least common denominator, so add some
    checking but otherwise leave it as the entry point for resetting the
    iostatus.
    
    Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Message-id: 20170508141310.8674-8-pbonzini@redhat.com
    Signed-off-by: default avatarJeff Cody <jcody@redhat.com>
    4c241cf5
    blockjob: introduce block_job_cancel_async, check iostatus invariants
    Paolo Bonzini authored
    
    
    The new functions helps respecting the invariant that the coroutine
    is entered with false user_resume, zero pause count and no error
    recorded in the iostatus.
    
    Resetting the iostatus is now common to all of block_job_cancel_async,
    block_job_user_resume and block_job_iostatus_reset, albeit with slight
    differences:
    
    - block_job_cancel_async resets the iostatus, and resumes the job if
    there was an error, but the coroutine is not restarted immediately.
    For example the caller may continue with a call to block_job_finish_sync.
    
    - block_job_user_resume resets the iostatus.  It wants to resume the job
    unconditionally, even if there was no error.
    
    - block_job_iostatus_reset doesn't resume the job at all.  Maybe that's
    a bug but it should be fixed separately.
    
    block_job_iostatus_reset does the least common denominator, so add some
    checking but otherwise leave it as the entry point for resetting the
    iostatus.
    
    Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Message-id: 20170508141310.8674-8-pbonzini@redhat.com
    Signed-off-by: default avatarJeff Cody <jcody@redhat.com>
Loading