qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/3] qcow2: Fix preallocated truncation
@ 2017-10-09 21:55 Max Reitz
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 1/3] qcow2: Fix unaligned " Max Reitz
                   ` (4 more replies)
  0 siblings, 5 replies; 16+ messages in thread
From: Max Reitz @ 2017-10-09 21:55 UTC (permalink / raw)
  To: qemu-block; +Cc: qemu-devel, Max Reitz, Kevin Wolf, Stefan Hajnoczi

There are (at least...) two bugs in preallocated truncation, which this
series fixes.

Both would have been apparent if the the related iotest had used the
default cluster size in addition to 512 byte clusters, but alas, it did
not.  This is remedied by patch 3 of this series.


Max Reitz (3):
  qcow2: Fix unaligned preallocated truncation
  qcow2: Always execute preallocate() in a coroutine
  iotests: Add cluster_size=64k to 125

 block/qcow2.c              |  42 +++-
 tests/qemu-iotests/125     |   7 +-
 tests/qemu-iotests/125.out | 480 ++++++++++++++++++++++++++++++++++++++++-----
 3 files changed, 472 insertions(+), 57 deletions(-)

-- 
2.13.6

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

* [Qemu-devel] [PATCH 1/3] qcow2: Fix unaligned preallocated truncation
  2017-10-09 21:55 [Qemu-devel] [PATCH 0/3] qcow2: Fix preallocated truncation Max Reitz
@ 2017-10-09 21:55 ` Max Reitz
  2017-10-09 21:57   ` Max Reitz
                     ` (2 more replies)
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 2/3] qcow2: Always execute preallocate() in a coroutine Max Reitz
                   ` (3 subsequent siblings)
  4 siblings, 3 replies; 16+ messages in thread
From: Max Reitz @ 2017-10-09 21:55 UTC (permalink / raw)
  To: qemu-block; +Cc: qemu-devel, Max Reitz, Kevin Wolf, Stefan Hajnoczi

A qcow2 image file's length is not required to have a length that is a
multiple of the cluster size.  However, qcow2_refcount_area() expects an
aligned value for its @start_offset parameter, so we need to round
@old_file_size up to the next cluster boundary.

Reported-by: pingl <pingl@redhat.com>
Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1414049
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 block/qcow2.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/block/qcow2.c b/block/qcow2.c
index 2f6a8e1ff8..c3b312cdef 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -3193,6 +3193,7 @@ static int qcow2_truncate(BlockDriverState *bs, int64_t offset,
                              "Failed to inquire current file length");
             return old_file_size;
         }
+        old_file_size = ROUND_UP(old_file_size, s->cluster_size);
 
         nb_new_data_clusters = DIV_ROUND_UP(offset - old_length,
                                             s->cluster_size);
-- 
2.13.6

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

* [Qemu-devel] [PATCH 2/3] qcow2: Always execute preallocate() in a coroutine
  2017-10-09 21:55 [Qemu-devel] [PATCH 0/3] qcow2: Fix preallocated truncation Max Reitz
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 1/3] qcow2: Fix unaligned " Max Reitz
@ 2017-10-09 21:55 ` Max Reitz
  2017-10-09 21:57   ` Max Reitz
                     ` (2 more replies)
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 3/3] iotests: Add cluster_size=64k to 125 Max Reitz
                   ` (2 subsequent siblings)
  4 siblings, 3 replies; 16+ messages in thread
From: Max Reitz @ 2017-10-09 21:55 UTC (permalink / raw)
  To: qemu-block; +Cc: qemu-devel, Max Reitz, Kevin Wolf, Stefan Hajnoczi

Some qcow2 functions (at least perform_cow()) expect s->lock to be
taken.  Therefore, if we want to make use of them, we should execute
preallocate() (as "preallocate_co") in a coroutine so that we can use
the qemu_co_mutex_* functions.

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 block/qcow2.c | 41 ++++++++++++++++++++++++++++++++++-------
 1 file changed, 34 insertions(+), 7 deletions(-)

diff --git a/block/qcow2.c b/block/qcow2.c
index c3b312cdef..cc75a5167f 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -2460,6 +2460,14 @@ static int qcow2_set_up_encryption(BlockDriverState *bs, const char *encryptfmt,
 }
 
 
+typedef struct PreallocCo {
+    BlockDriverState *bs;
+    uint64_t offset;
+    uint64_t new_length;
+
+    int ret;
+} PreallocCo;
+
 /**
  * Preallocates metadata structures for data clusters between @offset (in the
  * guest disk) and @new_length (which is thus generally the new guest disk
@@ -2467,9 +2475,12 @@ static int qcow2_set_up_encryption(BlockDriverState *bs, const char *encryptfmt,
  *
  * Returns: 0 on success, -errno on failure.
  */
-static int preallocate(BlockDriverState *bs,
-                       uint64_t offset, uint64_t new_length)
+static void coroutine_fn preallocate_co(void *opaque)
 {
+    struct PreallocCo *params = opaque;
+    BlockDriverState *bs = params->bs;
+    uint64_t offset = params->offset;
+    uint64_t new_length = params->new_length;
     BDRVQcow2State *s = bs->opaque;
     uint64_t bytes;
     uint64_t host_offset = 0;
@@ -2477,9 +2488,7 @@ static int preallocate(BlockDriverState *bs,
     int ret;
     QCowL2Meta *meta;
 
-    if (qemu_in_coroutine()) {
-        qemu_co_mutex_lock(&s->lock);
-    }
+    qemu_co_mutex_lock(&s->lock);
 
     assert(offset <= new_length);
     bytes = new_length - offset;
@@ -2533,10 +2542,28 @@ static int preallocate(BlockDriverState *bs,
     ret = 0;
 
 done:
+    qemu_co_mutex_unlock(&s->lock);
+    params->ret = ret;
+}
+
+static int preallocate(BlockDriverState *bs,
+                       uint64_t offset, uint64_t new_length)
+{
+    PreallocCo params = {
+        .bs         = bs,
+        .offset     = offset,
+        .new_length = new_length,
+        .ret        = -EINPROGRESS,
+    };
+
     if (qemu_in_coroutine()) {
-        qemu_co_mutex_unlock(&s->lock);
+        preallocate_co(&params);
+    } else {
+        Coroutine *co = qemu_coroutine_create(preallocate_co, &params);
+        bdrv_coroutine_enter(bs, co);
+        BDRV_POLL_WHILE(bs, params.ret == -EINPROGRESS);
     }
-    return ret;
+    return params.ret;
 }
 
 /* qcow2_refcount_metadata_size:
-- 
2.13.6

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

* [Qemu-devel] [PATCH 3/3] iotests: Add cluster_size=64k to 125
  2017-10-09 21:55 [Qemu-devel] [PATCH 0/3] qcow2: Fix preallocated truncation Max Reitz
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 1/3] qcow2: Fix unaligned " Max Reitz
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 2/3] qcow2: Always execute preallocate() in a coroutine Max Reitz
@ 2017-10-09 21:55 ` Max Reitz
  2017-10-09 22:32   ` Eric Blake
  2017-10-09 23:30   ` [Qemu-devel] [Qemu-block] " Jeff Cody
  2017-10-11 13:23 ` [Qemu-devel] [PATCH 0/3] qcow2: Fix preallocated truncation Max Reitz
  2017-10-11 15:05 ` Stefan Hajnoczi
  4 siblings, 2 replies; 16+ messages in thread
From: Max Reitz @ 2017-10-09 21:55 UTC (permalink / raw)
  To: qemu-block; +Cc: qemu-devel, Max Reitz, Kevin Wolf, Stefan Hajnoczi

Apparently it would be a good idea to test that, too.

Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 tests/qemu-iotests/125     |   7 +-
 tests/qemu-iotests/125.out | 480 ++++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 437 insertions(+), 50 deletions(-)

diff --git a/tests/qemu-iotests/125 b/tests/qemu-iotests/125
index 9424313e82..c20c71570c 100755
--- a/tests/qemu-iotests/125
+++ b/tests/qemu-iotests/125
@@ -69,13 +69,15 @@ fi
 # in B
 CREATION_SIZE=$((2 * 1024 * 1024 - 48 * 1024))
 
+# 512 is the actual test -- but it's good to test 64k as well, just to be sure.
+for cluster_size in 512 64k; do
 # in kB
 for GROWTH_SIZE in 16 48 80; do
     for create_mode in off metadata falloc full; do
         for growth_mode in off metadata falloc full; do
-            echo "--- growth_size=$GROWTH_SIZE create_mode=$create_mode growth_mode=$growth_mode ---"
+            echo "--- cluster_size=$cluster_size growth_size=$GROWTH_SIZE create_mode=$create_mode growth_mode=$growth_mode ---"
 
-            IMGOPTS="preallocation=$create_mode,cluster_size=512" _make_test_img ${CREATION_SIZE}
+            IMGOPTS="preallocation=$create_mode,cluster_size=$cluster_size" _make_test_img ${CREATION_SIZE}
             $QEMU_IMG resize -f "$IMGFMT" --preallocation=$growth_mode "$TEST_IMG" +${GROWTH_SIZE}K
 
             host_size_0=$(get_image_size_on_host)
@@ -123,6 +125,7 @@ for GROWTH_SIZE in 16 48 80; do
         done
     done
 done
+done
 
 # success, all done
 echo '*** done'
diff --git a/tests/qemu-iotests/125.out b/tests/qemu-iotests/125.out
index 3f4d6e31a6..596905f533 100644
--- a/tests/qemu-iotests/125.out
+++ b/tests/qemu-iotests/125.out
@@ -1,5 +1,5 @@
 QA output created by 125
---- growth_size=16 create_mode=off growth_mode=off ---
+--- cluster_size=512 growth_size=16 create_mode=off growth_mode=off ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -7,7 +7,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=off growth_mode=metadata ---
+--- cluster_size=512 growth_size=16 create_mode=off growth_mode=metadata ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -15,7 +15,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=off growth_mode=falloc ---
+--- cluster_size=512 growth_size=16 create_mode=off growth_mode=falloc ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -23,7 +23,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=off growth_mode=full ---
+--- cluster_size=512 growth_size=16 create_mode=off growth_mode=full ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -31,7 +31,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=metadata growth_mode=off ---
+--- cluster_size=512 growth_size=16 create_mode=metadata growth_mode=off ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -39,7 +39,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=metadata growth_mode=metadata ---
+--- cluster_size=512 growth_size=16 create_mode=metadata growth_mode=metadata ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -47,7 +47,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=metadata growth_mode=falloc ---
+--- cluster_size=512 growth_size=16 create_mode=metadata growth_mode=falloc ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -55,7 +55,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=metadata growth_mode=full ---
+--- cluster_size=512 growth_size=16 create_mode=metadata growth_mode=full ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -63,7 +63,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=falloc growth_mode=off ---
+--- cluster_size=512 growth_size=16 create_mode=falloc growth_mode=off ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -71,7 +71,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=falloc growth_mode=metadata ---
+--- cluster_size=512 growth_size=16 create_mode=falloc growth_mode=metadata ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -79,7 +79,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=falloc growth_mode=falloc ---
+--- cluster_size=512 growth_size=16 create_mode=falloc growth_mode=falloc ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -87,7 +87,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=falloc growth_mode=full ---
+--- cluster_size=512 growth_size=16 create_mode=falloc growth_mode=full ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -95,7 +95,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=full growth_mode=off ---
+--- cluster_size=512 growth_size=16 create_mode=full growth_mode=off ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -103,7 +103,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=full growth_mode=metadata ---
+--- cluster_size=512 growth_size=16 create_mode=full growth_mode=metadata ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -111,7 +111,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=full growth_mode=falloc ---
+--- cluster_size=512 growth_size=16 create_mode=full growth_mode=falloc ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -119,7 +119,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=16 create_mode=full growth_mode=full ---
+--- cluster_size=512 growth_size=16 create_mode=full growth_mode=full ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -127,7 +127,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 16384/16384 bytes at offset 2048000
 16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=off growth_mode=off ---
+--- cluster_size=512 growth_size=48 create_mode=off growth_mode=off ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -135,7 +135,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=off growth_mode=metadata ---
+--- cluster_size=512 growth_size=48 create_mode=off growth_mode=metadata ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -143,7 +143,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=off growth_mode=falloc ---
+--- cluster_size=512 growth_size=48 create_mode=off growth_mode=falloc ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -151,7 +151,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=off growth_mode=full ---
+--- cluster_size=512 growth_size=48 create_mode=off growth_mode=full ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -159,7 +159,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=metadata growth_mode=off ---
+--- cluster_size=512 growth_size=48 create_mode=metadata growth_mode=off ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -167,7 +167,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=metadata growth_mode=metadata ---
+--- cluster_size=512 growth_size=48 create_mode=metadata growth_mode=metadata ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -175,7 +175,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=metadata growth_mode=falloc ---
+--- cluster_size=512 growth_size=48 create_mode=metadata growth_mode=falloc ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -183,7 +183,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=metadata growth_mode=full ---
+--- cluster_size=512 growth_size=48 create_mode=metadata growth_mode=full ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -191,7 +191,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=falloc growth_mode=off ---
+--- cluster_size=512 growth_size=48 create_mode=falloc growth_mode=off ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -199,7 +199,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=falloc growth_mode=metadata ---
+--- cluster_size=512 growth_size=48 create_mode=falloc growth_mode=metadata ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -207,7 +207,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=falloc growth_mode=falloc ---
+--- cluster_size=512 growth_size=48 create_mode=falloc growth_mode=falloc ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -215,7 +215,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=falloc growth_mode=full ---
+--- cluster_size=512 growth_size=48 create_mode=falloc growth_mode=full ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -223,7 +223,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=full growth_mode=off ---
+--- cluster_size=512 growth_size=48 create_mode=full growth_mode=off ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -231,7 +231,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=full growth_mode=metadata ---
+--- cluster_size=512 growth_size=48 create_mode=full growth_mode=metadata ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -239,7 +239,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=full growth_mode=falloc ---
+--- cluster_size=512 growth_size=48 create_mode=full growth_mode=falloc ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -247,7 +247,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=48 create_mode=full growth_mode=full ---
+--- cluster_size=512 growth_size=48 create_mode=full growth_mode=full ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -255,7 +255,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 49152/49152 bytes at offset 2048000
 48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=off growth_mode=off ---
+--- cluster_size=512 growth_size=80 create_mode=off growth_mode=off ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -263,7 +263,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=off growth_mode=metadata ---
+--- cluster_size=512 growth_size=80 create_mode=off growth_mode=metadata ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -271,7 +271,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=off growth_mode=falloc ---
+--- cluster_size=512 growth_size=80 create_mode=off growth_mode=falloc ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -279,7 +279,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=off growth_mode=full ---
+--- cluster_size=512 growth_size=80 create_mode=off growth_mode=full ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -287,7 +287,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=metadata growth_mode=off ---
+--- cluster_size=512 growth_size=80 create_mode=metadata growth_mode=off ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -295,7 +295,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=metadata growth_mode=metadata ---
+--- cluster_size=512 growth_size=80 create_mode=metadata growth_mode=metadata ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -303,7 +303,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=metadata growth_mode=falloc ---
+--- cluster_size=512 growth_size=80 create_mode=metadata growth_mode=falloc ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -311,7 +311,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=metadata growth_mode=full ---
+--- cluster_size=512 growth_size=80 create_mode=metadata growth_mode=full ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -319,7 +319,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=falloc growth_mode=off ---
+--- cluster_size=512 growth_size=80 create_mode=falloc growth_mode=off ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -327,7 +327,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=falloc growth_mode=metadata ---
+--- cluster_size=512 growth_size=80 create_mode=falloc growth_mode=metadata ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -335,7 +335,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=falloc growth_mode=falloc ---
+--- cluster_size=512 growth_size=80 create_mode=falloc growth_mode=falloc ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -343,7 +343,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=falloc growth_mode=full ---
+--- cluster_size=512 growth_size=80 create_mode=falloc growth_mode=full ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -351,7 +351,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=full growth_mode=off ---
+--- cluster_size=512 growth_size=80 create_mode=full growth_mode=off ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -359,7 +359,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=full growth_mode=metadata ---
+--- cluster_size=512 growth_size=80 create_mode=full growth_mode=metadata ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -367,7 +367,7 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=full growth_mode=falloc ---
+--- cluster_size=512 growth_size=80 create_mode=full growth_mode=falloc ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
@@ -375,7 +375,391 @@ wrote 2048000/2048000 bytes at offset 0
 wrote 81920/81920 bytes at offset 2048000
 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 
---- growth_size=80 create_mode=full growth_mode=full ---
+--- cluster_size=512 growth_size=80 create_mode=full growth_mode=full ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=off growth_mode=off ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=off growth_mode=metadata ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=off growth_mode=falloc ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=off growth_mode=full ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=metadata growth_mode=off ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=metadata growth_mode=metadata ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=metadata growth_mode=falloc ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=metadata growth_mode=full ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=falloc growth_mode=off ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=falloc growth_mode=metadata ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=falloc growth_mode=falloc ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=falloc growth_mode=full ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=full growth_mode=off ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=full growth_mode=metadata ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=full growth_mode=falloc ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=16 create_mode=full growth_mode=full ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 16384/16384 bytes at offset 2048000
+16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=off growth_mode=off ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=off growth_mode=metadata ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=off growth_mode=falloc ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=off growth_mode=full ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=metadata growth_mode=off ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=metadata growth_mode=metadata ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=metadata growth_mode=falloc ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=metadata growth_mode=full ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=falloc growth_mode=off ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=falloc growth_mode=metadata ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=falloc growth_mode=falloc ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=falloc growth_mode=full ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=full growth_mode=off ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=full growth_mode=metadata ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=full growth_mode=falloc ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=48 create_mode=full growth_mode=full ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 49152/49152 bytes at offset 2048000
+48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=off growth_mode=off ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=off growth_mode=metadata ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=off growth_mode=falloc ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=off growth_mode=full ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=metadata growth_mode=off ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=metadata growth_mode=metadata ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=metadata growth_mode=falloc ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=metadata growth_mode=full ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=falloc growth_mode=off ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=falloc growth_mode=metadata ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=falloc growth_mode=falloc ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=falloc growth_mode=full ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=full growth_mode=off ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=full growth_mode=metadata ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=full growth_mode=falloc ---
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
+Image resized.
+wrote 2048000/2048000 bytes at offset 0
+1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+wrote 81920/81920 bytes at offset 2048000
+80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+
+--- cluster_size=64k growth_size=80 create_mode=full growth_mode=full ---
 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
 Image resized.
 wrote 2048000/2048000 bytes at offset 0
-- 
2.13.6

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

* Re: [Qemu-devel] [PATCH 1/3] qcow2: Fix unaligned preallocated truncation
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 1/3] qcow2: Fix unaligned " Max Reitz
@ 2017-10-09 21:57   ` Max Reitz
  2017-10-09 22:25   ` Eric Blake
  2017-10-09 23:30   ` [Qemu-devel] [Qemu-block] " Jeff Cody
  2 siblings, 0 replies; 16+ messages in thread
From: Max Reitz @ 2017-10-09 21:57 UTC (permalink / raw)
  To: qemu-block; +Cc: qemu-devel, Kevin Wolf, Stefan Hajnoczi, qemu-stable

[-- Attachment #1: Type: text/plain, Size: 625 bytes --]

On 2017-10-09 23:55, Max Reitz wrote:
> A qcow2 image file's length is not required to have a length that is a
> multiple of the cluster size.  However, qcow2_refcount_area() expects an
> aligned value for its @start_offset parameter, so we need to round
> @old_file_size up to the next cluster boundary.
> 
> Reported-by: pingl <pingl@redhat.com>
> Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1414049
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
>  block/qcow2.c | 1 +
>  1 file changed, 1 insertion(+)

Oops, forgot:

Cc: qemu-stable@nongnu.org

(2.10.1 is out by now, but you never know.)


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 512 bytes --]

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

* Re: [Qemu-devel] [PATCH 2/3] qcow2: Always execute preallocate() in a coroutine
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 2/3] qcow2: Always execute preallocate() in a coroutine Max Reitz
@ 2017-10-09 21:57   ` Max Reitz
  2017-10-09 22:28   ` Eric Blake
  2017-10-09 23:30   ` [Qemu-devel] [Qemu-block] " Jeff Cody
  2 siblings, 0 replies; 16+ messages in thread
From: Max Reitz @ 2017-10-09 21:57 UTC (permalink / raw)
  To: qemu-block; +Cc: qemu-devel, Kevin Wolf, Stefan Hajnoczi, qemu-stable

[-- Attachment #1: Type: text/plain, Size: 497 bytes --]

On 2017-10-09 23:55, Max Reitz wrote:
> Some qcow2 functions (at least perform_cow()) expect s->lock to be
> taken.  Therefore, if we want to make use of them, we should execute
> preallocate() (as "preallocate_co") in a coroutine so that we can use
> the qemu_co_mutex_* functions.
> 
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
>  block/qcow2.c | 41 ++++++++++++++++++++++++++++++++++-------
>  1 file changed, 34 insertions(+), 7 deletions(-)

Cc: qemu-stable@nongnu.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 512 bytes --]

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

* Re: [Qemu-devel] [PATCH 1/3] qcow2: Fix unaligned preallocated truncation
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 1/3] qcow2: Fix unaligned " Max Reitz
  2017-10-09 21:57   ` Max Reitz
@ 2017-10-09 22:25   ` Eric Blake
  2017-10-11 11:30     ` Max Reitz
  2017-10-09 23:30   ` [Qemu-devel] [Qemu-block] " Jeff Cody
  2 siblings, 1 reply; 16+ messages in thread
From: Eric Blake @ 2017-10-09 22:25 UTC (permalink / raw)
  To: Max Reitz, qemu-block; +Cc: Kevin Wolf, qemu-devel, Stefan Hajnoczi, Ping Li

[-- Attachment #1: Type: text/plain, Size: 1032 bytes --]

On 10/09/2017 04:55 PM, Max Reitz wrote:
> A qcow2 image file's length is not required to have a length that is a
> multiple of the cluster size.  However, qcow2_refcount_area() expects an
> aligned value for its @start_offset parameter, so we need to round
> @old_file_size up to the next cluster boundary.
> 
> Reported-by: pingl <pingl@redhat.com>

Should we use a real name? My autocomplete when adding cc suggests Ping Li.

(The upcoming git 2.15.0 adds my patch that auto-cc's anyone listed in
Reported-by, so we don't have to keep doing it manually:
https://github.com/git/git/commit/09ac6737 - but that doesn't help you
while you are still on 2.13.6)

> Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1414049
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
>  block/qcow2.c | 1 +
>  1 file changed, 1 insertion(+)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH 2/3] qcow2: Always execute preallocate() in a coroutine
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 2/3] qcow2: Always execute preallocate() in a coroutine Max Reitz
  2017-10-09 21:57   ` Max Reitz
@ 2017-10-09 22:28   ` Eric Blake
  2017-10-11 11:31     ` Max Reitz
  2017-10-09 23:30   ` [Qemu-devel] [Qemu-block] " Jeff Cody
  2 siblings, 1 reply; 16+ messages in thread
From: Eric Blake @ 2017-10-09 22:28 UTC (permalink / raw)
  To: Max Reitz, qemu-block; +Cc: Kevin Wolf, qemu-devel, Stefan Hajnoczi

[-- Attachment #1: Type: text/plain, Size: 1542 bytes --]

On 10/09/2017 04:55 PM, Max Reitz wrote:
> Some qcow2 functions (at least perform_cow()) expect s->lock to be
> taken.  Therefore, if we want to make use of them, we should execute
> preallocate() (as "preallocate_co") in a coroutine so that we can use
> the qemu_co_mutex_* functions.
> 
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
>  block/qcow2.c | 41 ++++++++++++++++++++++++++++++++++-------
>  1 file changed, 34 insertions(+), 7 deletions(-)
> 

> +++ b/block/qcow2.c
> @@ -2460,6 +2460,14 @@ static int qcow2_set_up_encryption(BlockDriverState *bs, const char *encryptfmt,
>  }
>  
>  
> +typedef struct PreallocCo {
> +    BlockDriverState *bs;
> +    uint64_t offset;
> +    uint64_t new_length;
> +
> +    int ret;
> +} PreallocCo;

Because you create a typedef here...


> +static void coroutine_fn preallocate_co(void *opaque)
>  {
> +    struct PreallocCo *params = opaque;

you could drop 'struct' here, the way you already dropped it...

> +static int preallocate(BlockDriverState *bs,
> +                       uint64_t offset, uint64_t new_length)
> +{
> +    PreallocCo params = {
> +        .bs         = bs,
> +        .offset     = offset,
> +        .new_length = new_length,
> +        .ret        = -EINPROGRESS,
> +    };

...here.  But that doesn't change semantics, so either way,

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [PATCH 3/3] iotests: Add cluster_size=64k to 125
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 3/3] iotests: Add cluster_size=64k to 125 Max Reitz
@ 2017-10-09 22:32   ` Eric Blake
  2017-10-09 23:30   ` [Qemu-devel] [Qemu-block] " Jeff Cody
  1 sibling, 0 replies; 16+ messages in thread
From: Eric Blake @ 2017-10-09 22:32 UTC (permalink / raw)
  To: Max Reitz, qemu-block; +Cc: Kevin Wolf, qemu-devel, Stefan Hajnoczi

[-- Attachment #1: Type: text/plain, Size: 761 bytes --]

On 10/09/2017 04:55 PM, Max Reitz wrote:
> Apparently it would be a good idea to test that, too.
> 
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
>  tests/qemu-iotests/125     |   7 +-
>  tests/qemu-iotests/125.out | 480 ++++++++++++++++++++++++++++++++++++++++-----
>  2 files changed, 437 insertions(+), 50 deletions(-)

Reviewed-by: Eric Blake <eblake@redhat.com>

The test is already long, and you've doubled its running time.  It's
already not part of CI runs (it's not part of -g quick); but the tests
get run manually by enough developers that it will still be a useful
potential regression catcher.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]

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

* Re: [Qemu-devel] [Qemu-block] [PATCH 1/3] qcow2: Fix unaligned preallocated truncation
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 1/3] qcow2: Fix unaligned " Max Reitz
  2017-10-09 21:57   ` Max Reitz
  2017-10-09 22:25   ` Eric Blake
@ 2017-10-09 23:30   ` Jeff Cody
  2 siblings, 0 replies; 16+ messages in thread
From: Jeff Cody @ 2017-10-09 23:30 UTC (permalink / raw)
  To: Max Reitz; +Cc: qemu-block, Kevin Wolf, qemu-devel, Stefan Hajnoczi

On Mon, Oct 09, 2017 at 11:55:31PM +0200, Max Reitz wrote:
> A qcow2 image file's length is not required to have a length that is a
> multiple of the cluster size.  However, qcow2_refcount_area() expects an
> aligned value for its @start_offset parameter, so we need to round
> @old_file_size up to the next cluster boundary.
> 
> Reported-by: pingl <pingl@redhat.com>
> Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1414049
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
>  block/qcow2.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/block/qcow2.c b/block/qcow2.c
> index 2f6a8e1ff8..c3b312cdef 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -3193,6 +3193,7 @@ static int qcow2_truncate(BlockDriverState *bs, int64_t offset,
>                               "Failed to inquire current file length");
>              return old_file_size;
>          }
> +        old_file_size = ROUND_UP(old_file_size, s->cluster_size);
>  
>          nb_new_data_clusters = DIV_ROUND_UP(offset - old_length,
>                                              s->cluster_size);
> -- 
> 2.13.6
> 
> 

Reviewed-by: Jeff Cody <jcody@redhat.com>

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

* Re: [Qemu-devel] [Qemu-block] [PATCH 2/3] qcow2: Always execute preallocate() in a coroutine
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 2/3] qcow2: Always execute preallocate() in a coroutine Max Reitz
  2017-10-09 21:57   ` Max Reitz
  2017-10-09 22:28   ` Eric Blake
@ 2017-10-09 23:30   ` Jeff Cody
  2 siblings, 0 replies; 16+ messages in thread
From: Jeff Cody @ 2017-10-09 23:30 UTC (permalink / raw)
  To: Max Reitz; +Cc: qemu-block, Kevin Wolf, qemu-devel, Stefan Hajnoczi

On Mon, Oct 09, 2017 at 11:55:32PM +0200, Max Reitz wrote:
> Some qcow2 functions (at least perform_cow()) expect s->lock to be
> taken.  Therefore, if we want to make use of them, we should execute
> preallocate() (as "preallocate_co") in a coroutine so that we can use
> the qemu_co_mutex_* functions.
> 
> Signed-off-by: Max Reitz <mreitz@redhat.com>

Reviewed-by: Jeff Cody <jcody@redhat.com>

> ---
>  block/qcow2.c | 41 ++++++++++++++++++++++++++++++++++-------
>  1 file changed, 34 insertions(+), 7 deletions(-)
> 
> diff --git a/block/qcow2.c b/block/qcow2.c
> index c3b312cdef..cc75a5167f 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -2460,6 +2460,14 @@ static int qcow2_set_up_encryption(BlockDriverState *bs, const char *encryptfmt,
>  }
>  
>  
> +typedef struct PreallocCo {
> +    BlockDriverState *bs;
> +    uint64_t offset;
> +    uint64_t new_length;
> +
> +    int ret;
> +} PreallocCo;
> +
>  /**
>   * Preallocates metadata structures for data clusters between @offset (in the
>   * guest disk) and @new_length (which is thus generally the new guest disk
> @@ -2467,9 +2475,12 @@ static int qcow2_set_up_encryption(BlockDriverState *bs, const char *encryptfmt,
>   *
>   * Returns: 0 on success, -errno on failure.
>   */
> -static int preallocate(BlockDriverState *bs,
> -                       uint64_t offset, uint64_t new_length)
> +static void coroutine_fn preallocate_co(void *opaque)
>  {
> +    struct PreallocCo *params = opaque;
> +    BlockDriverState *bs = params->bs;
> +    uint64_t offset = params->offset;
> +    uint64_t new_length = params->new_length;
>      BDRVQcow2State *s = bs->opaque;
>      uint64_t bytes;
>      uint64_t host_offset = 0;
> @@ -2477,9 +2488,7 @@ static int preallocate(BlockDriverState *bs,
>      int ret;
>      QCowL2Meta *meta;
>  
> -    if (qemu_in_coroutine()) {
> -        qemu_co_mutex_lock(&s->lock);
> -    }
> +    qemu_co_mutex_lock(&s->lock);
>  
>      assert(offset <= new_length);
>      bytes = new_length - offset;
> @@ -2533,10 +2542,28 @@ static int preallocate(BlockDriverState *bs,
>      ret = 0;
>  
>  done:
> +    qemu_co_mutex_unlock(&s->lock);
> +    params->ret = ret;
> +}
> +
> +static int preallocate(BlockDriverState *bs,
> +                       uint64_t offset, uint64_t new_length)
> +{
> +    PreallocCo params = {
> +        .bs         = bs,
> +        .offset     = offset,
> +        .new_length = new_length,
> +        .ret        = -EINPROGRESS,
> +    };
> +
>      if (qemu_in_coroutine()) {
> -        qemu_co_mutex_unlock(&s->lock);
> +        preallocate_co(&params);
> +    } else {
> +        Coroutine *co = qemu_coroutine_create(preallocate_co, &params);
> +        bdrv_coroutine_enter(bs, co);
> +        BDRV_POLL_WHILE(bs, params.ret == -EINPROGRESS);
>      }
> -    return ret;
> +    return params.ret;
>  }
>  
>  /* qcow2_refcount_metadata_size:
> -- 
> 2.13.6
> 
> 

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

* Re: [Qemu-devel] [Qemu-block] [PATCH 3/3] iotests: Add cluster_size=64k to 125
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 3/3] iotests: Add cluster_size=64k to 125 Max Reitz
  2017-10-09 22:32   ` Eric Blake
@ 2017-10-09 23:30   ` Jeff Cody
  1 sibling, 0 replies; 16+ messages in thread
From: Jeff Cody @ 2017-10-09 23:30 UTC (permalink / raw)
  To: Max Reitz; +Cc: qemu-block, Kevin Wolf, qemu-devel, Stefan Hajnoczi

On Mon, Oct 09, 2017 at 11:55:33PM +0200, Max Reitz wrote:
> Apparently it would be a good idea to test that, too.
> 
> Signed-off-by: Max Reitz <mreitz@redhat.com>

Reviewed-by: Jeff Cody <jcody@redhat.com>

> ---
>  tests/qemu-iotests/125     |   7 +-
>  tests/qemu-iotests/125.out | 480 ++++++++++++++++++++++++++++++++++++++++-----
>  2 files changed, 437 insertions(+), 50 deletions(-)
> 
> diff --git a/tests/qemu-iotests/125 b/tests/qemu-iotests/125
> index 9424313e82..c20c71570c 100755
> --- a/tests/qemu-iotests/125
> +++ b/tests/qemu-iotests/125
> @@ -69,13 +69,15 @@ fi
>  # in B
>  CREATION_SIZE=$((2 * 1024 * 1024 - 48 * 1024))
>  
> +# 512 is the actual test -- but it's good to test 64k as well, just to be sure.
> +for cluster_size in 512 64k; do
>  # in kB
>  for GROWTH_SIZE in 16 48 80; do
>      for create_mode in off metadata falloc full; do
>          for growth_mode in off metadata falloc full; do
> -            echo "--- growth_size=$GROWTH_SIZE create_mode=$create_mode growth_mode=$growth_mode ---"
> +            echo "--- cluster_size=$cluster_size growth_size=$GROWTH_SIZE create_mode=$create_mode growth_mode=$growth_mode ---"
>  
> -            IMGOPTS="preallocation=$create_mode,cluster_size=512" _make_test_img ${CREATION_SIZE}
> +            IMGOPTS="preallocation=$create_mode,cluster_size=$cluster_size" _make_test_img ${CREATION_SIZE}
>              $QEMU_IMG resize -f "$IMGFMT" --preallocation=$growth_mode "$TEST_IMG" +${GROWTH_SIZE}K
>  
>              host_size_0=$(get_image_size_on_host)
> @@ -123,6 +125,7 @@ for GROWTH_SIZE in 16 48 80; do
>          done
>      done
>  done
> +done
>  
>  # success, all done
>  echo '*** done'
> diff --git a/tests/qemu-iotests/125.out b/tests/qemu-iotests/125.out
> index 3f4d6e31a6..596905f533 100644
> --- a/tests/qemu-iotests/125.out
> +++ b/tests/qemu-iotests/125.out
> @@ -1,5 +1,5 @@
>  QA output created by 125
> ---- growth_size=16 create_mode=off growth_mode=off ---
> +--- cluster_size=512 growth_size=16 create_mode=off growth_mode=off ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -7,7 +7,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=off growth_mode=metadata ---
> +--- cluster_size=512 growth_size=16 create_mode=off growth_mode=metadata ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -15,7 +15,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=off growth_mode=falloc ---
> +--- cluster_size=512 growth_size=16 create_mode=off growth_mode=falloc ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -23,7 +23,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=off growth_mode=full ---
> +--- cluster_size=512 growth_size=16 create_mode=off growth_mode=full ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -31,7 +31,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=metadata growth_mode=off ---
> +--- cluster_size=512 growth_size=16 create_mode=metadata growth_mode=off ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -39,7 +39,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=metadata growth_mode=metadata ---
> +--- cluster_size=512 growth_size=16 create_mode=metadata growth_mode=metadata ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -47,7 +47,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=metadata growth_mode=falloc ---
> +--- cluster_size=512 growth_size=16 create_mode=metadata growth_mode=falloc ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -55,7 +55,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=metadata growth_mode=full ---
> +--- cluster_size=512 growth_size=16 create_mode=metadata growth_mode=full ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -63,7 +63,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=falloc growth_mode=off ---
> +--- cluster_size=512 growth_size=16 create_mode=falloc growth_mode=off ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -71,7 +71,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=falloc growth_mode=metadata ---
> +--- cluster_size=512 growth_size=16 create_mode=falloc growth_mode=metadata ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -79,7 +79,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=falloc growth_mode=falloc ---
> +--- cluster_size=512 growth_size=16 create_mode=falloc growth_mode=falloc ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -87,7 +87,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=falloc growth_mode=full ---
> +--- cluster_size=512 growth_size=16 create_mode=falloc growth_mode=full ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -95,7 +95,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=full growth_mode=off ---
> +--- cluster_size=512 growth_size=16 create_mode=full growth_mode=off ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -103,7 +103,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=full growth_mode=metadata ---
> +--- cluster_size=512 growth_size=16 create_mode=full growth_mode=metadata ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -111,7 +111,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=full growth_mode=falloc ---
> +--- cluster_size=512 growth_size=16 create_mode=full growth_mode=falloc ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -119,7 +119,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=16 create_mode=full growth_mode=full ---
> +--- cluster_size=512 growth_size=16 create_mode=full growth_mode=full ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -127,7 +127,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 16384/16384 bytes at offset 2048000
>  16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=off growth_mode=off ---
> +--- cluster_size=512 growth_size=48 create_mode=off growth_mode=off ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -135,7 +135,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=off growth_mode=metadata ---
> +--- cluster_size=512 growth_size=48 create_mode=off growth_mode=metadata ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -143,7 +143,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=off growth_mode=falloc ---
> +--- cluster_size=512 growth_size=48 create_mode=off growth_mode=falloc ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -151,7 +151,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=off growth_mode=full ---
> +--- cluster_size=512 growth_size=48 create_mode=off growth_mode=full ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -159,7 +159,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=metadata growth_mode=off ---
> +--- cluster_size=512 growth_size=48 create_mode=metadata growth_mode=off ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -167,7 +167,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=metadata growth_mode=metadata ---
> +--- cluster_size=512 growth_size=48 create_mode=metadata growth_mode=metadata ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -175,7 +175,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=metadata growth_mode=falloc ---
> +--- cluster_size=512 growth_size=48 create_mode=metadata growth_mode=falloc ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -183,7 +183,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=metadata growth_mode=full ---
> +--- cluster_size=512 growth_size=48 create_mode=metadata growth_mode=full ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -191,7 +191,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=falloc growth_mode=off ---
> +--- cluster_size=512 growth_size=48 create_mode=falloc growth_mode=off ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -199,7 +199,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=falloc growth_mode=metadata ---
> +--- cluster_size=512 growth_size=48 create_mode=falloc growth_mode=metadata ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -207,7 +207,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=falloc growth_mode=falloc ---
> +--- cluster_size=512 growth_size=48 create_mode=falloc growth_mode=falloc ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -215,7 +215,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=falloc growth_mode=full ---
> +--- cluster_size=512 growth_size=48 create_mode=falloc growth_mode=full ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -223,7 +223,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=full growth_mode=off ---
> +--- cluster_size=512 growth_size=48 create_mode=full growth_mode=off ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -231,7 +231,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=full growth_mode=metadata ---
> +--- cluster_size=512 growth_size=48 create_mode=full growth_mode=metadata ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -239,7 +239,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=full growth_mode=falloc ---
> +--- cluster_size=512 growth_size=48 create_mode=full growth_mode=falloc ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -247,7 +247,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=48 create_mode=full growth_mode=full ---
> +--- cluster_size=512 growth_size=48 create_mode=full growth_mode=full ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -255,7 +255,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 49152/49152 bytes at offset 2048000
>  48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=off growth_mode=off ---
> +--- cluster_size=512 growth_size=80 create_mode=off growth_mode=off ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -263,7 +263,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=off growth_mode=metadata ---
> +--- cluster_size=512 growth_size=80 create_mode=off growth_mode=metadata ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -271,7 +271,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=off growth_mode=falloc ---
> +--- cluster_size=512 growth_size=80 create_mode=off growth_mode=falloc ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -279,7 +279,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=off growth_mode=full ---
> +--- cluster_size=512 growth_size=80 create_mode=off growth_mode=full ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -287,7 +287,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=metadata growth_mode=off ---
> +--- cluster_size=512 growth_size=80 create_mode=metadata growth_mode=off ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -295,7 +295,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=metadata growth_mode=metadata ---
> +--- cluster_size=512 growth_size=80 create_mode=metadata growth_mode=metadata ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -303,7 +303,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=metadata growth_mode=falloc ---
> +--- cluster_size=512 growth_size=80 create_mode=metadata growth_mode=falloc ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -311,7 +311,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=metadata growth_mode=full ---
> +--- cluster_size=512 growth_size=80 create_mode=metadata growth_mode=full ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -319,7 +319,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=falloc growth_mode=off ---
> +--- cluster_size=512 growth_size=80 create_mode=falloc growth_mode=off ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -327,7 +327,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=falloc growth_mode=metadata ---
> +--- cluster_size=512 growth_size=80 create_mode=falloc growth_mode=metadata ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -335,7 +335,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=falloc growth_mode=falloc ---
> +--- cluster_size=512 growth_size=80 create_mode=falloc growth_mode=falloc ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -343,7 +343,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=falloc growth_mode=full ---
> +--- cluster_size=512 growth_size=80 create_mode=falloc growth_mode=full ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -351,7 +351,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=full growth_mode=off ---
> +--- cluster_size=512 growth_size=80 create_mode=full growth_mode=off ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -359,7 +359,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=full growth_mode=metadata ---
> +--- cluster_size=512 growth_size=80 create_mode=full growth_mode=metadata ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -367,7 +367,7 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=full growth_mode=falloc ---
> +--- cluster_size=512 growth_size=80 create_mode=full growth_mode=falloc ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> @@ -375,7 +375,391 @@ wrote 2048000/2048000 bytes at offset 0
>  wrote 81920/81920 bytes at offset 2048000
>  80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>  
> ---- growth_size=80 create_mode=full growth_mode=full ---
> +--- cluster_size=512 growth_size=80 create_mode=full growth_mode=full ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=off growth_mode=off ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=off growth_mode=metadata ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=off growth_mode=falloc ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=off growth_mode=full ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=metadata growth_mode=off ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=metadata growth_mode=metadata ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=metadata growth_mode=falloc ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=metadata growth_mode=full ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=falloc growth_mode=off ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=falloc growth_mode=metadata ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=falloc growth_mode=falloc ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=falloc growth_mode=full ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=full growth_mode=off ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=full growth_mode=metadata ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=full growth_mode=falloc ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=16 create_mode=full growth_mode=full ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 16384/16384 bytes at offset 2048000
> +16 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=off growth_mode=off ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=off growth_mode=metadata ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=off growth_mode=falloc ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=off growth_mode=full ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=metadata growth_mode=off ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=metadata growth_mode=metadata ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=metadata growth_mode=falloc ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=metadata growth_mode=full ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=falloc growth_mode=off ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=falloc growth_mode=metadata ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=falloc growth_mode=falloc ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=falloc growth_mode=full ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=full growth_mode=off ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=full growth_mode=metadata ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=full growth_mode=falloc ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=48 create_mode=full growth_mode=full ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 49152/49152 bytes at offset 2048000
> +48 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=off growth_mode=off ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=off growth_mode=metadata ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=off growth_mode=falloc ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=off growth_mode=full ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=off
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=metadata growth_mode=off ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=metadata growth_mode=metadata ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=metadata growth_mode=falloc ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=metadata growth_mode=full ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=metadata
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=falloc growth_mode=off ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=falloc growth_mode=metadata ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=falloc growth_mode=falloc ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=falloc growth_mode=full ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=falloc
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=full growth_mode=off ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=full growth_mode=metadata ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=full growth_mode=falloc ---
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
> +Image resized.
> +wrote 2048000/2048000 bytes at offset 0
> +1.953 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +wrote 81920/81920 bytes at offset 2048000
> +80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> +--- cluster_size=64k growth_size=80 create_mode=full growth_mode=full ---
>  Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2048000 preallocation=full
>  Image resized.
>  wrote 2048000/2048000 bytes at offset 0
> -- 
> 2.13.6
> 
> 

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

* Re: [Qemu-devel] [PATCH 1/3] qcow2: Fix unaligned preallocated truncation
  2017-10-09 22:25   ` Eric Blake
@ 2017-10-11 11:30     ` Max Reitz
  0 siblings, 0 replies; 16+ messages in thread
From: Max Reitz @ 2017-10-11 11:30 UTC (permalink / raw)
  To: Eric Blake, qemu-block; +Cc: Kevin Wolf, qemu-devel, Stefan Hajnoczi, Ping Li

[-- Attachment #1: Type: text/plain, Size: 1655 bytes --]

On 2017-10-10 00:25, Eric Blake wrote:
> On 10/09/2017 04:55 PM, Max Reitz wrote:
>> A qcow2 image file's length is not required to have a length that is a
>> multiple of the cluster size.  However, qcow2_refcount_area() expects an
>> aligned value for its @start_offset parameter, so we need to round
>> @old_file_size up to the next cluster boundary.
>>
>> Reported-by: pingl <pingl@redhat.com>
> 
> Should we use a real name? My autocomplete when adding cc suggests Ping Li.

So does Red Hat's staff search. :-)

I thought I'd just take the name from the BZ, so I'd be safe -- pleading
the fact that real names are only required for S-o-bs.  But well, why not.

> (The upcoming git 2.15.0 adds my patch that auto-cc's anyone listed in
> Reported-by, so we don't have to keep doing it manually:
> https://github.com/git/git/commit/09ac6737 - but that doesn't help you
> while you are still on 2.13.6)

I like doing it manually because I don't like CC-ing only singular
patches of a series, though -- at least not without CC-ing the cover
letter, too.

So far I was lucky enough not to get into a situation where I didn't
want someone I wanted to CC on one patch not to see the whole series.
(In this case here I don't think Red Hat QA gains much from seeing the
upstream patch.)  If I get unlucky in the future, I guess I'll have to
extend my email sending script...

>> Bug: https://bugzilla.redhat.com/show_bug.cgi?id=1414049
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>>  block/qcow2.c | 1 +
>>  1 file changed, 1 insertion(+)
>>
> 
> Reviewed-by: Eric Blake <eblake@redhat.com>

Thanks!

Max


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 512 bytes --]

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

* Re: [Qemu-devel] [PATCH 2/3] qcow2: Always execute preallocate() in a coroutine
  2017-10-09 22:28   ` Eric Blake
@ 2017-10-11 11:31     ` Max Reitz
  0 siblings, 0 replies; 16+ messages in thread
From: Max Reitz @ 2017-10-11 11:31 UTC (permalink / raw)
  To: Eric Blake, qemu-block; +Cc: Kevin Wolf, qemu-devel, Stefan Hajnoczi

[-- Attachment #1: Type: text/plain, Size: 1592 bytes --]

On 2017-10-10 00:28, Eric Blake wrote:
> On 10/09/2017 04:55 PM, Max Reitz wrote:
>> Some qcow2 functions (at least perform_cow()) expect s->lock to be
>> taken.  Therefore, if we want to make use of them, we should execute
>> preallocate() (as "preallocate_co") in a coroutine so that we can use
>> the qemu_co_mutex_* functions.
>>
>> Signed-off-by: Max Reitz <mreitz@redhat.com>
>> ---
>>  block/qcow2.c | 41 ++++++++++++++++++++++++++++++++++-------
>>  1 file changed, 34 insertions(+), 7 deletions(-)
>>
> 
>> +++ b/block/qcow2.c
>> @@ -2460,6 +2460,14 @@ static int qcow2_set_up_encryption(BlockDriverState *bs, const char *encryptfmt,
>>  }
>>  
>>  
>> +typedef struct PreallocCo {
>> +    BlockDriverState *bs;
>> +    uint64_t offset;
>> +    uint64_t new_length;
>> +
>> +    int ret;
>> +} PreallocCo;
> 
> Because you create a typedef here...
> 
> 
>> +static void coroutine_fn preallocate_co(void *opaque)
>>  {
>> +    struct PreallocCo *params = opaque;
> 
> you could drop 'struct' here, the way you already dropped it...

Ah, yes, that was from before I added the typedef...  Will fix.

Max

> 
>> +static int preallocate(BlockDriverState *bs,
>> +                       uint64_t offset, uint64_t new_length)
>> +{
>> +    PreallocCo params = {
>> +        .bs         = bs,
>> +        .offset     = offset,
>> +        .new_length = new_length,
>> +        .ret        = -EINPROGRESS,
>> +    };
> 
> ...here.  But that doesn't change semantics, so either way,
> 
> Reviewed-by: Eric Blake <eblake@redhat.com>
> 



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 512 bytes --]

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

* Re: [Qemu-devel] [PATCH 0/3] qcow2: Fix preallocated truncation
  2017-10-09 21:55 [Qemu-devel] [PATCH 0/3] qcow2: Fix preallocated truncation Max Reitz
                   ` (2 preceding siblings ...)
  2017-10-09 21:55 ` [Qemu-devel] [PATCH 3/3] iotests: Add cluster_size=64k to 125 Max Reitz
@ 2017-10-11 13:23 ` Max Reitz
  2017-10-11 15:05 ` Stefan Hajnoczi
  4 siblings, 0 replies; 16+ messages in thread
From: Max Reitz @ 2017-10-11 13:23 UTC (permalink / raw)
  To: qemu-block; +Cc: qemu-devel, Kevin Wolf, Stefan Hajnoczi

[-- Attachment #1: Type: text/plain, Size: 949 bytes --]

On 2017-10-09 23:55, Max Reitz wrote:
> There are (at least...) two bugs in preallocated truncation, which this
> series fixes.
> 
> Both would have been apparent if the the related iotest had used the
> default cluster size in addition to 512 byte clusters, but alas, it did
> not.  This is remedied by patch 3 of this series.
> 
> 
> Max Reitz (3):
>   qcow2: Fix unaligned preallocated truncation
>   qcow2: Always execute preallocate() in a coroutine
>   iotests: Add cluster_size=64k to 125
> 
>  block/qcow2.c              |  42 +++-
>  tests/qemu-iotests/125     |   7 +-
>  tests/qemu-iotests/125.out | 480 ++++++++++++++++++++++++++++++++++++++++-----
>  3 files changed, 472 insertions(+), 57 deletions(-)

Thanks for the reviews, changed the reporter name to Ping Li in patch 1,
dropped the superfluous "struct" from patch 2, and applied to my block
branch:

https://github.com/XanClic/qemu/commits/block

Max


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 512 bytes --]

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

* Re: [Qemu-devel] [PATCH 0/3] qcow2: Fix preallocated truncation
  2017-10-09 21:55 [Qemu-devel] [PATCH 0/3] qcow2: Fix preallocated truncation Max Reitz
                   ` (3 preceding siblings ...)
  2017-10-11 13:23 ` [Qemu-devel] [PATCH 0/3] qcow2: Fix preallocated truncation Max Reitz
@ 2017-10-11 15:05 ` Stefan Hajnoczi
  4 siblings, 0 replies; 16+ messages in thread
From: Stefan Hajnoczi @ 2017-10-11 15:05 UTC (permalink / raw)
  To: Max Reitz; +Cc: qemu-block, qemu-devel, Kevin Wolf

On Mon, Oct 09, 2017 at 11:55:30PM +0200, Max Reitz wrote:
> There are (at least...) two bugs in preallocated truncation, which this
> series fixes.
> 
> Both would have been apparent if the the related iotest had used the
> default cluster size in addition to 512 byte clusters, but alas, it did
> not.  This is remedied by patch 3 of this series.
> 
> 
> Max Reitz (3):
>   qcow2: Fix unaligned preallocated truncation
>   qcow2: Always execute preallocate() in a coroutine
>   iotests: Add cluster_size=64k to 125
> 
>  block/qcow2.c              |  42 +++-
>  tests/qemu-iotests/125     |   7 +-
>  tests/qemu-iotests/125.out | 480 ++++++++++++++++++++++++++++++++++++++++-----
>  3 files changed, 472 insertions(+), 57 deletions(-)
> 
> -- 
> 2.13.6
> 

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

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

end of thread, other threads:[~2017-10-11 15:06 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-10-09 21:55 [Qemu-devel] [PATCH 0/3] qcow2: Fix preallocated truncation Max Reitz
2017-10-09 21:55 ` [Qemu-devel] [PATCH 1/3] qcow2: Fix unaligned " Max Reitz
2017-10-09 21:57   ` Max Reitz
2017-10-09 22:25   ` Eric Blake
2017-10-11 11:30     ` Max Reitz
2017-10-09 23:30   ` [Qemu-devel] [Qemu-block] " Jeff Cody
2017-10-09 21:55 ` [Qemu-devel] [PATCH 2/3] qcow2: Always execute preallocate() in a coroutine Max Reitz
2017-10-09 21:57   ` Max Reitz
2017-10-09 22:28   ` Eric Blake
2017-10-11 11:31     ` Max Reitz
2017-10-09 23:30   ` [Qemu-devel] [Qemu-block] " Jeff Cody
2017-10-09 21:55 ` [Qemu-devel] [PATCH 3/3] iotests: Add cluster_size=64k to 125 Max Reitz
2017-10-09 22:32   ` Eric Blake
2017-10-09 23:30   ` [Qemu-devel] [Qemu-block] " Jeff Cody
2017-10-11 13:23 ` [Qemu-devel] [PATCH 0/3] qcow2: Fix preallocated truncation Max Reitz
2017-10-11 15:05 ` Stefan Hajnoczi

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).