mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
qemu-img: check block status of backing file when converting.
When converting images, check the block status of its backing file chain to avoid needlessly reading zeros. Signed-off-by: Ren Kimura <rkx1209dev@gmail.com> Message-id: 1461773098-20356-1-git-send-email-rkx1209dev@gmail.com Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
9036e87c74
commit
263a6f4c3a
1 changed files with 13 additions and 2 deletions
15
qemu-img.c
15
qemu-img.c
|
@ -1475,10 +1475,21 @@ static int convert_iteration_sectors(ImgConvertState *s, int64_t sector_num)
|
|||
} else if (!s->target_has_backing) {
|
||||
/* Without a target backing file we must copy over the contents of
|
||||
* the backing file as well. */
|
||||
/* TODO Check block status of the backing file chain to avoid
|
||||
/* Check block status of the backing file chain to avoid
|
||||
* needlessly reading zeroes and limiting the iteration to the
|
||||
* buffer size */
|
||||
s->status = BLK_DATA;
|
||||
ret = bdrv_get_block_status_above(blk_bs(s->src[s->src_cur]), NULL,
|
||||
sector_num - s->src_cur_offset,
|
||||
n, &n, &file);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (ret & BDRV_BLOCK_ZERO) {
|
||||
s->status = BLK_ZERO;
|
||||
} else {
|
||||
s->status = BLK_DATA;
|
||||
}
|
||||
} else {
|
||||
s->status = BLK_BACKING_FILE;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue