block: Convert block job core to BlockBackend
commitb6d2e59995fa82c7fe469d47dfc22cf9bf2f8a5e
authorKevin Wolf <kwolf@redhat.com>
Fri, 8 Apr 2016 12:51:09 +0000 (8 14:51 +0200)
committerKevin Wolf <kwolf@redhat.com>
Wed, 25 May 2016 17:04:21 +0000 (25 19:04 +0200)
tree4c4b068514226799720a463ebee7016a592285e2
parent0c3169dffa68fcdc71ad42e9a60faa4778de0397
block: Convert block job core to BlockBackend

This adds a new BlockBackend field to the BlockJob struct, which
coexists with the BlockDriverState while converting the individual jobs.

When creating a block job, a new BlockBackend is created on top of the
given BlockDriverState, and it is destroyed when the BlockJob ends. The
reference to the BDS is now held by the BlockBackend instead of calling
bdrv_ref/unref manually.

We have to be careful when we use bdrv_replace_in_backing_chain() in
block jobs because this changes the BDS that job->blk points to. At the
moment block jobs are too tightly coupled with their BDS, so that moving
a job to another BDS isn't easily possible; therefore, we need to just
manually undo this change afterwards.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
block/mirror.c
blockjob.c
include/block/blockjob.h