OSDN Git Service

blockjob: introduce block_job_cancel_async, check iostatus invariants
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 8 May 2017 14:13:06 +0000 (16:13 +0200)
committerJeff Cody <jcody@redhat.com>
Wed, 24 May 2017 20:38:51 +0000 (16:38 -0400)
commit4c241cf5d6ca06c682e033cf8b327b63b1f4b784
tree693fb5c994e5d2e79ca45e25e0d1e9e8a8c2435c
parent2caf63a9039f245ef778833dfc87f0c58adba47b
blockjob: introduce block_job_cancel_async, check iostatus invariants

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: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20170508141310.8674-8-pbonzini@redhat.com
Signed-off-by: Jeff Cody <jcody@redhat.com>
blockjob.c