block: copy over job and dirty bitmap fields in bdrv_append
While these should not be in use at the time a transaction is started, a command in the prepare phase of a transaction might have added them, so they need to be brought over. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
5c171afa4c
commit
a9fc4408e3
15
block.c
15
block.c
@ -1027,6 +1027,16 @@ void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
|
||||
tmp.iostatus_enabled = bs_top->iostatus_enabled;
|
||||
tmp.iostatus = bs_top->iostatus;
|
||||
|
||||
/* dirty bitmap */
|
||||
tmp.dirty_count = bs_top->dirty_count;
|
||||
tmp.dirty_bitmap = bs_top->dirty_bitmap;
|
||||
assert(bs_new->dirty_bitmap == NULL);
|
||||
|
||||
/* job */
|
||||
tmp.in_use = bs_top->in_use;
|
||||
tmp.job = bs_top->job;
|
||||
assert(bs_new->job == NULL);
|
||||
|
||||
/* keep the same entry in bdrv_states */
|
||||
pstrcpy(tmp.device_name, sizeof(tmp.device_name), bs_top->device_name);
|
||||
tmp.list = bs_top->list;
|
||||
@ -1051,6 +1061,11 @@ void bdrv_append(BlockDriverState *bs_new, BlockDriverState *bs_top)
|
||||
/* clear the copied fields in the new backing file */
|
||||
bdrv_detach_dev(bs_new, bs_new->dev);
|
||||
|
||||
bs_new->job = NULL;
|
||||
bs_new->in_use = 0;
|
||||
bs_new->dirty_bitmap = NULL;
|
||||
bs_new->dirty_count = 0;
|
||||
|
||||
qemu_co_queue_init(&bs_new->throttled_reqs);
|
||||
memset(&bs_new->io_base, 0, sizeof(bs_new->io_base));
|
||||
memset(&bs_new->io_limits, 0, sizeof(bs_new->io_limits));
|
||||
|
Loading…
Reference in New Issue
Block a user