qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] block/raw-posix: use seek_hole ahead of fiemap
@ 2014-09-25  5:23 Tony Breeds
  2014-09-25  6:21 ` Markus Armbruster
                   ` (2 more replies)
  0 siblings, 3 replies; 20+ messages in thread
From: Tony Breeds @ 2014-09-25  5:23 UTC (permalink / raw)
  To: qemu-devel; +Cc: Pádraig Brady, Tony Breeds, Michael Steffens

The command
  qemu-img convert -O raw inputimage.qcow2 outputimage.raw

intermittently creates corrupted output images, when the input image is not yet fully synchronized to disk.  This patch preferese the use of seek_hole checks to determine if the sector is present in the disk image.

While we're there modify try_fiemap() to set FIEMAP_FLAG_SYNC.

Reported-By: Michael Steffens <michael_steffens@posteo.de>
CC: Pádraig Brady <pbrady@redhat.com>
Signed-off-by: Tony Breeds <tony@bakeyournoodle.com>
---
 block/raw-posix.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/block/raw-posix.c b/block/raw-posix.c
index a253697..b438c54 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -1472,7 +1472,7 @@ static int64_t try_fiemap(BlockDriverState *bs, off_t start, off_t *data,
 
     f.fm.fm_start = start;
     f.fm.fm_length = (int64_t)nb_sectors * BDRV_SECTOR_SIZE;
-    f.fm.fm_flags = 0;
+    f.fm.fm_flags = FIEMAP_FLAG_SYNC;
     f.fm.fm_extent_count = 1;
     f.fm.fm_reserved = 0;
     if (ioctl(s->fd, FS_IOC_FIEMAP, &f) == -1) {
@@ -1561,9 +1561,9 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs,
 
     start = sector_num * BDRV_SECTOR_SIZE;
 
-    ret = try_fiemap(bs, start, &data, &hole, nb_sectors, pnum);
+    ret = try_seek_hole(bs, start, &data, &hole, pnum);
     if (ret < 0) {
-        ret = try_seek_hole(bs, start, &data, &hole, pnum);
+        ret = try_fiemap(bs, start, &data, &hole, nb_sectors, pnum);
         if (ret < 0) {
             /* Assume everything is allocated. */
             data = 0;
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2014-10-14 12:35 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-25  5:23 [Qemu-devel] [PATCH] block/raw-posix: use seek_hole ahead of fiemap Tony Breeds
2014-09-25  6:21 ` Markus Armbruster
2014-09-25  6:29   ` Tony Breeds
2014-09-25  6:42     ` Greg Kurz
2014-09-25  6:48       ` Tony Breeds
2014-09-25  6:47     ` Markus Armbruster
2014-09-25  7:30   ` Kevin Wolf
2014-09-25  9:00     ` Tony Breeds
2014-09-25  9:52       ` Kevin Wolf
2014-09-25 10:41       ` Pádraig Brady
2014-09-25 12:45     ` Eric Blake
2014-09-25 12:40 ` Eric Blake
2014-09-25 23:14 ` [Qemu-devel] [PATCH v2 1/2] block/raw-posix: Fix disk corruption in try_fiemap Tony Breeds
2014-09-25 23:14   ` [Qemu-devel] [PATCH v2 2/2] block/raw-posix: use seek_hole ahead of fiemap Tony Breeds
2014-09-26 17:04     ` Max Reitz
2014-09-26 17:22     ` Eric Blake
2014-09-26 17:05   ` [Qemu-devel] [PATCH v2 1/2] block/raw-posix: Fix disk corruption in try_fiemap Max Reitz
2014-09-26 17:09   ` Eric Blake
2014-09-26 22:15     ` Tony Breeds
2014-10-14 12:35   ` Kevin Wolf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).