@@ -376,6 +376,29 @@ void block_job_start(BlockJob *job)
bdrv_coroutine_enter(blk_bs(job->blk), job->co);
}
+static void block_job_commit(BlockJob *job)
+{
+ assert(!job->ret);
+ if (job->driver->commit) {
+ job->driver->commit(job);
+ }
+}
+
+static void block_job_abort(BlockJob *job)
+{
+ assert(job->ret);
+ if (job->driver->abort) {
+ job->driver->abort(job);
+ }
+}
+
+static void block_job_clean(BlockJob *job)
+{
+ if (job->driver->clean) {
+ job->driver->clean(job);
+ }
+}
+
static void block_job_completed_single(BlockJob *job)
{
assert(job->completed);
@@ -386,17 +409,11 @@ static void block_job_completed_single(BlockJob *job)
}
if (!job->ret) {
- if (job->driver->commit) {
- job->driver->commit(job);
- }
+ block_job_commit(job);
} else {
- if (job->driver->abort) {
- job->driver->abort(job);
- }
- }
- if (job->driver->clean) {
- job->driver->clean(job);
+ block_job_abort(job);
}
+ block_job_clean(job);
if (job->cb) {
job->cb(job->opaque, job->ret);
The completed_single function is getting a little mucked up with checking to see which callbacks exist, so let's factor them out. Signed-off-by: John Snow <jsnow@redhat.com> --- blockjob.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-)