qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH for-2.11 v2] file-posix: Clear out first sector in h


From: Fam Zheng
Subject: [Qemu-devel] [PATCH for-2.11 v2] file-posix: Clear out first sector in hdev_create
Date: Fri, 11 Aug 2017 16:09:39 +0800

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 <address@hidden>

---

v2: Use stack allocated buffer. [Eric]
    Fix return value.
    (Keep qemu_write_full instead of switching to qemu_pwritev because
    the former handles short writes.)
    Fix typo "qemu-img". [Changlong]
---
 block/file-posix.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/block/file-posix.c b/block/file-posix.c
index f4de022ae0..a63bbf2b90 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -2703,6 +2703,16 @@ static int hdev_create(const char *filename, QemuOpts 
*opts,
         ret = -ENOSPC;
     }
 
+    if (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;
 }
-- 
2.13.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]