qemu-img: There is more than one host device driver
I haven't heard yet of anyone using qemu-img to copy an image to a real floppy, but it's a valid use case. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
702ef63f3e
commit
12c09b8ce2
@ -1014,6 +1014,7 @@ static BlockDriver bdrv_host_device = {
|
||||
.bdrv_close = raw_close,
|
||||
.bdrv_create = hdev_create,
|
||||
.create_options = raw_create_options,
|
||||
.no_zero_init = 1,
|
||||
.bdrv_flush = raw_flush,
|
||||
|
||||
.bdrv_aio_readv = raw_aio_readv,
|
||||
@ -1110,6 +1111,7 @@ static BlockDriver bdrv_host_floppy = {
|
||||
.bdrv_close = raw_close,
|
||||
.bdrv_create = hdev_create,
|
||||
.create_options = raw_create_options,
|
||||
.no_zero_init = 1,
|
||||
.bdrv_flush = raw_flush,
|
||||
|
||||
.bdrv_aio_readv = raw_aio_readv,
|
||||
@ -1192,6 +1194,7 @@ static BlockDriver bdrv_host_cdrom = {
|
||||
.bdrv_close = raw_close,
|
||||
.bdrv_create = hdev_create,
|
||||
.create_options = raw_create_options,
|
||||
.no_zero_init = 1,
|
||||
.bdrv_flush = raw_flush,
|
||||
|
||||
.bdrv_aio_readv = raw_aio_readv,
|
||||
@ -1313,6 +1316,7 @@ static BlockDriver bdrv_host_cdrom = {
|
||||
.bdrv_close = raw_close,
|
||||
.bdrv_create = hdev_create,
|
||||
.create_options = raw_create_options,
|
||||
.no_zero_init = 1,
|
||||
.bdrv_flush = raw_flush,
|
||||
|
||||
.bdrv_aio_readv = raw_aio_readv,
|
||||
|
@ -117,6 +117,9 @@ struct BlockDriver {
|
||||
/* Returns number of errors in image, -errno for internal errors */
|
||||
int (*bdrv_check)(BlockDriverState* bs);
|
||||
|
||||
/* Set if newly created images are not guaranteed to contain only zeros */
|
||||
int no_zero_init;
|
||||
|
||||
struct BlockDriver *next;
|
||||
};
|
||||
|
||||
|
@ -743,7 +743,7 @@ static int img_convert(int argc, char **argv)
|
||||
if (n > bs_offset + bs_sectors - sector_num)
|
||||
n = bs_offset + bs_sectors - sector_num;
|
||||
|
||||
if (strcmp(drv->format_name, "host_device")) {
|
||||
if (!drv->no_zero_init) {
|
||||
/* If the output image is being created as a copy on write image,
|
||||
assume that sectors which are unallocated in the input image
|
||||
are present in both the output's and input's base images (no
|
||||
@ -776,7 +776,7 @@ static int img_convert(int argc, char **argv)
|
||||
If the output is to a host device, we also write out
|
||||
sectors that are entirely 0, since whatever data was
|
||||
already there is garbage, not 0s. */
|
||||
if (strcmp(drv->format_name, "host_device") == 0 || out_baseimg ||
|
||||
if (drv->no_zero_init || out_baseimg ||
|
||||
is_allocated_sectors(buf1, n, &n1)) {
|
||||
if (bdrv_write(out_bs, sector_num, buf1, n1) < 0)
|
||||
error("error while writing");
|
||||
|
Loading…
Reference in New Issue
Block a user