diff options
author | Fam Zheng <famz@redhat.com> | 2017-09-08 17:44:57 +0800 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2017-09-26 14:46:23 +0200 |
commit | 97ec9117c346239fc5b0f6d1973111e8ca370087 (patch) | |
tree | f07754e7dfde0bda52d770b7e5f214ab163fb169 | |
parent | a16efd53406bc8d89f87253ab10290f8d1b145a7 (diff) | |
download | qemu-97ec9117c346239fc5b0f6d1973111e8ca370087.zip qemu-97ec9117c346239fc5b0f6d1973111e8ca370087.tar.gz qemu-97ec9117c346239fc5b0f6d1973111e8ca370087.tar.bz2 |
file-posix: Clear out first sector in hdev_create
People get surprised when, after "qemu-img create -f raw /dev/sdX", they
still see qcow2 with "qemu-img info", if previously the bdev had a qcow2
header. While this is natural because raw doesn't need to write any
magic bytes during creation, hdev_create is free to clear out the first
sector to make sure the stale qcow2 header doesn't cause such confusion.
Signed-off-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
-rw-r--r-- | block/file-posix.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/block/file-posix.c b/block/file-posix.c index ab12a2b..36ee89e 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -2730,6 +2730,16 @@ static int hdev_create(const char *filename, QemuOpts *opts, ret = -ENOSPC; } + if (!ret && total_size) { + uint8_t buf[BDRV_SECTOR_SIZE] = { 0 }; + int64_t zero_size = MIN(BDRV_SECTOR_SIZE, total_size); + if (lseek(fd, 0, SEEK_SET) == -1) { + ret = -errno; + } else { + ret = qemu_write_full(fd, buf, zero_size); + ret = ret == zero_size ? 0 : -errno; + } + } qemu_close(fd); return ret; } |