- block: bugfix: Don't pause vm when NOSPACE EIO happened - block: enable cache mode of empty cdrom - block/mirror: fix file-system went to read-only after block-mirror - scsi-bus: fix incorrect call for blk_error_retry_reset_timeout() - scsi-bus: fix unmatched object_unref() - block: Add sanity check when setting retry parameters - block-backend: Stop retrying when draining - scsi-disk: Add support for retry on errors - scsi-bus: Refactor the code that retries requests - virtio_blk: Add support for retry on errors - block: Add error retry param setting - block-backend: Add timeout support for retry - block-backend: Enable retry action on errors - block-backend: Add device specific retry callback - block-backend: Introduce retry timer - qapi/block-core: Add retry option for error action - scsi: bugfix: fix division by zero - scsi: cdrom: Fix crash after remote cdrom detached - qemu-pr: fixed ioctl failed for multipath disk - scsi-disk: define props in scsi_block_disk to avoid memleaks - bugfix: fix possible memory leak - bugfix: fix some illegal memory access and memory leak - util/log: add CONFIG_DISABLE_QEMU_LOG macro - log: Add some logs on VM runtime path - bugfix: fix eventfds may double free when vm_id reused in ivshmem - hw/display/macfb: Fix missing ERRP_GUARD() in macfb_nubus_realize() - hw/cxl/cxl-host: Fix missing ERRP_GUARD() in cxl_fixed_memory_window_config() - qemu-img create: 'cache' paramter only use for reg file image - qemu-img: add qemu-img direct create - qemu-img block: set zero flags only when discard_zeros of the block supported - Revert "file-posix: Remove unused s->discard_zeroes" - pcie_sriov: Validate NumVFs (CVE-2024-26327) - hw/nvme: Use pcie_sriov_num_vfs() (CVE-2024-26328) - hw/acpi/cpu: Use CPUState typedef - target/i386/sev: Fix missing ERRP_GUARD() for error_prepend() - virtio-gpu: remove needless condition - hw/i2c/smbus_slave: Add object path on error prints - vfio/pci: Ascend710 change to bar2 quirk - vfio/pci: Ascend910 need 4Bytes quirk in bar0 - vfio/pci: Ascend710 need 4Bytes quirk in bar0 - vfio/pci: Ascend310 need 4Bytes quirk in bar4 - chardev/char-socket: Fix TLS io channels sending too much data to the backend - i386/cpuid: Move leaf 7 to correct group - i386/cpuid: Decrease cpuid_i when skipping CPUID leaf 1F - i386/cpu: Mask with XCR0/XSS mask for FEAT_XSAVE_XCR0_HI and FEAT_XSAVE_XSS_HI leafs - i386/cpu: Clear FEAT_XSAVE_XSS_LO/HI leafs when CPUID_EXT_XSAVE is not available - blkio: Respect memory-alignment for bounce buffer allocations - virtio-gpu: Correct virgl_renderer_resource_get_info() error check - hw/usb: Style cleanup - tests/qemu-iotests: resolved the problem that the 108 test cases in the container fail Signed-off-by: Jiabo Feng <fengjiabo1@huawei.com> (cherry picked from commit 404d45bf9147058a475a8031c454a6c8e0acc123)
535 lines
31 KiB
Diff
535 lines
31 KiB
Diff
From 422ac7d67a7ced985b1beef4b33cc43b48d1f240 Mon Sep 17 00:00:00 2001
|
|
From: Jinhua Cao <caojinhua1@huawei.com>
|
|
Date: Mon, 18 Mar 2024 10:18:07 +0800
|
|
Subject: [PATCH] qemu-img: add qemu-img direct create
|
|
|
|
Introdue buffer_size while creating raw file, then we
|
|
can controll the speed of direct write by:
|
|
qemu-img create -t 'cache' -o buffer_size='num'
|
|
|
|
Signed-off-by: Jinhua Cao <caojinhua1@huawei.com>
|
|
---
|
|
block/file-posix.c | 65 ++++++++++++++++++--
|
|
include/block/block_int-common.h | 2 +
|
|
qapi/block-core.json | 6 +-
|
|
qemu-img-cmds.hx | 4 +-
|
|
qemu-img.c | 14 ++++-
|
|
tests/qemu-iotests/049.out | 102 +++++++++++++++----------------
|
|
tests/qemu-iotests/099.out | 2 +-
|
|
7 files changed, 134 insertions(+), 61 deletions(-)
|
|
|
|
diff --git a/block/file-posix.c b/block/file-posix.c
|
|
index 4782aba59f..4ac8f684f1 100644
|
|
--- a/block/file-posix.c
|
|
+++ b/block/file-posix.c
|
|
@@ -128,6 +128,10 @@
|
|
#define FTYPE_CD 1
|
|
|
|
#define MAX_BLOCKSIZE 4096
|
|
+#define DEFAULT_BUFFER_SIZE 65536
|
|
+#define BUFFER_ALIGN_SIZE 65536
|
|
+#define MIN_BUFFER_SIZE 65536
|
|
+#define MAX_BUFFER_SIZE 16777216
|
|
|
|
/* Posix file locking bytes. Libvirt takes byte 0, we start from higher bytes,
|
|
* leaving a few more bytes for its future use. */
|
|
@@ -203,6 +207,8 @@ typedef struct RawPosixAIOData {
|
|
off_t aio_offset;
|
|
uint64_t aio_nbytes;
|
|
|
|
+ size_t buffer_size;
|
|
+
|
|
union {
|
|
struct {
|
|
struct iovec *iov;
|
|
@@ -2630,7 +2636,8 @@ static void raw_close(BlockDriverState *bs)
|
|
*/
|
|
static int coroutine_fn
|
|
raw_regular_truncate(BlockDriverState *bs, int fd, int64_t offset,
|
|
- PreallocMode prealloc, Error **errp)
|
|
+ PreallocMode prealloc, size_t buffer_size,
|
|
+ Error **errp)
|
|
{
|
|
RawPosixAIOData acb;
|
|
|
|
@@ -2639,6 +2646,7 @@ raw_regular_truncate(BlockDriverState *bs, int fd, int64_t offset,
|
|
.aio_fildes = fd,
|
|
.aio_type = QEMU_AIO_TRUNCATE,
|
|
.aio_offset = offset,
|
|
+ .buffer_size = buffer_size,
|
|
.truncate = {
|
|
.prealloc = prealloc,
|
|
.errp = errp,
|
|
@@ -2664,7 +2672,8 @@ static int coroutine_fn raw_co_truncate(BlockDriverState *bs, int64_t offset,
|
|
|
|
if (S_ISREG(st.st_mode)) {
|
|
/* Always resizes to the exact @offset */
|
|
- return raw_regular_truncate(bs, s->fd, offset, prealloc, errp);
|
|
+ return raw_regular_truncate(bs, s->fd, offset, prealloc,
|
|
+ DEFAULT_BUFFER_SIZE, errp);
|
|
}
|
|
|
|
if (prealloc != PREALLOC_MODE_OFF) {
|
|
@@ -2882,6 +2891,8 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
|
|
int fd;
|
|
uint64_t perm, shared;
|
|
int result = 0;
|
|
+ int flags = O_RDWR | O_BINARY;
|
|
+ size_t buffer_size = DEFAULT_BUFFER_SIZE;
|
|
|
|
/* Validate options and set default values */
|
|
assert(options->driver == BLOCKDEV_DRIVER_FILE);
|
|
@@ -2901,9 +2912,19 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
|
|
error_setg(errp, "Extent size hint is too large");
|
|
goto out;
|
|
}
|
|
+ if (!file_opts->cache) {
|
|
+ file_opts->cache = g_strdup("writeback");
|
|
+ }
|
|
+ if (file_opts->preallocation == PREALLOC_MODE_FULL &&
|
|
+ !strcmp(file_opts->cache, "none")) {
|
|
+ flags |= O_DIRECT;
|
|
+ }
|
|
+ if (file_opts->has_buffersize) {
|
|
+ buffer_size = file_opts->buffersize;
|
|
+ }
|
|
|
|
/* Create file */
|
|
- fd = qemu_create(file_opts->filename, O_RDWR | O_BINARY, 0644, errp);
|
|
+ fd = qemu_create(file_opts->filename, flags, 0644, errp);
|
|
if (fd < 0) {
|
|
result = -errno;
|
|
goto out;
|
|
@@ -2938,7 +2959,8 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
|
|
}
|
|
|
|
/* Clear the file by truncating it to 0 */
|
|
- result = raw_regular_truncate(NULL, fd, 0, PREALLOC_MODE_OFF, errp);
|
|
+ result = raw_regular_truncate(NULL, fd, 0, PREALLOC_MODE_OFF,
|
|
+ buffer_size, errp);
|
|
if (result < 0) {
|
|
goto out_unlock;
|
|
}
|
|
@@ -2982,7 +3004,8 @@ raw_co_create(BlockdevCreateOptions *options, Error **errp)
|
|
/* Resize and potentially preallocate the file to the desired
|
|
* final size */
|
|
result = raw_regular_truncate(NULL, fd, file_opts->size,
|
|
- file_opts->preallocation, errp);
|
|
+ file_opts->preallocation,
|
|
+ buffer_size, errp);
|
|
if (result < 0) {
|
|
goto out_unlock;
|
|
}
|
|
@@ -3003,6 +3026,8 @@ out_close:
|
|
error_setg_errno(errp, -result, "Could not close the new file");
|
|
}
|
|
out:
|
|
+ g_free(file_opts->cache);
|
|
+ file_opts->cache = NULL;
|
|
return result;
|
|
}
|
|
|
|
@@ -3018,6 +3043,8 @@ raw_co_create_opts(BlockDriver *drv, const char *filename,
|
|
PreallocMode prealloc;
|
|
char *buf = NULL;
|
|
Error *local_err = NULL;
|
|
+ size_t buffersize = DEFAULT_BUFFER_SIZE;
|
|
+ char *cache = NULL;
|
|
|
|
/* Skip file: protocol prefix */
|
|
strstart(filename, "file:", &filename);
|
|
@@ -3040,6 +3067,21 @@ raw_co_create_opts(BlockDriver *drv, const char *filename,
|
|
return -EINVAL;
|
|
}
|
|
|
|
+ buffersize = qemu_opt_get_size_del(opts, BLOCK_OPT_BUFFER_SIZE,
|
|
+ DEFAULT_BUFFER_SIZE);
|
|
+ if (buffersize < MIN_BUFFER_SIZE || buffersize > MAX_BUFFER_SIZE) {
|
|
+ error_setg_errno(errp, EINVAL, "Buffer size must be between %d "
|
|
+ "and %d", MIN_BUFFER_SIZE, MAX_BUFFER_SIZE);
|
|
+ return -EINVAL;
|
|
+ }
|
|
+
|
|
+ cache = qemu_opt_get_del(opts, BLOCK_OPT_CACHE);
|
|
+ if (!cache) {
|
|
+ cache = g_strdup("writeback");
|
|
+ }
|
|
+
|
|
+ buffersize = ROUND_UP(buffersize, BUFFER_ALIGN_SIZE);
|
|
+
|
|
options = (BlockdevCreateOptions) {
|
|
.driver = BLOCKDEV_DRIVER_FILE,
|
|
.u.file = {
|
|
@@ -3051,6 +3093,9 @@ raw_co_create_opts(BlockDriver *drv, const char *filename,
|
|
.nocow = nocow,
|
|
.has_extent_size_hint = has_extent_size_hint,
|
|
.extent_size_hint = extent_size_hint,
|
|
+ .has_buffersize = true,
|
|
+ .buffersize = buffersize,
|
|
+ .cache = cache,
|
|
},
|
|
};
|
|
return raw_co_create(&options, errp);
|
|
@@ -3741,6 +3786,16 @@ static QemuOptsList raw_create_opts = {
|
|
.type = QEMU_OPT_SIZE,
|
|
.help = "Extent size hint for the image file, 0 to disable"
|
|
},
|
|
+ {
|
|
+ .name = BLOCK_OPT_CACHE,
|
|
+ .type = QEMU_OPT_STRING,
|
|
+ .help = "Cache mode (allowed values: writeback, none)"
|
|
+ },
|
|
+ {
|
|
+ .name = BLOCK_OPT_BUFFER_SIZE,
|
|
+ .type = QEMU_OPT_SIZE,
|
|
+ .help = "write buffer size"
|
|
+ },
|
|
{ /* end of list */ }
|
|
}
|
|
};
|
|
diff --git a/include/block/block_int-common.h b/include/block/block_int-common.h
|
|
index 4e31d161c5..a6e2436524 100644
|
|
--- a/include/block/block_int-common.h
|
|
+++ b/include/block/block_int-common.h
|
|
@@ -57,6 +57,8 @@
|
|
#define BLOCK_OPT_DATA_FILE_RAW "data_file_raw"
|
|
#define BLOCK_OPT_COMPRESSION_TYPE "compression_type"
|
|
#define BLOCK_OPT_EXTL2 "extended_l2"
|
|
+#define BLOCK_OPT_CACHE "cache"
|
|
+#define BLOCK_OPT_BUFFER_SIZE "buffer_size"
|
|
|
|
#define BLOCK_PROBE_BUF_SIZE 512
|
|
|
|
diff --git a/qapi/block-core.json b/qapi/block-core.json
|
|
index ca390c5700..1444624590 100644
|
|
--- a/qapi/block-core.json
|
|
+++ b/qapi/block-core.json
|
|
@@ -4906,6 +4906,8 @@
|
|
#
|
|
# @extent-size-hint: Extent size hint to add to the image file; 0 for
|
|
# not adding an extent size hint (default: 1 MB, since 5.1)
|
|
+# @cache: Cache mode used to write the output disk image
|
|
+# @buffersize: Buffer size for creating image
|
|
#
|
|
# Since: 2.12
|
|
##
|
|
@@ -4914,7 +4916,9 @@
|
|
'size': 'size',
|
|
'*preallocation': 'PreallocMode',
|
|
'*nocow': 'bool',
|
|
- '*extent-size-hint': 'size'} }
|
|
+ '*extent-size-hint': 'size',
|
|
+ '*cache': 'str',
|
|
+ '*buffersize': 'size'} }
|
|
|
|
##
|
|
# @BlockdevCreateOptionsGluster:
|
|
diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
|
|
index 068692d13e..20bdcd7b82 100644
|
|
--- a/qemu-img-cmds.hx
|
|
+++ b/qemu-img-cmds.hx
|
|
@@ -52,9 +52,9 @@ SRST
|
|
ERST
|
|
|
|
DEF("create", img_create,
|
|
- "create [--object objectdef] [-q] [-f fmt] [-b backing_file [-F backing_fmt]] [-u] [-o options] filename [size]")
|
|
+ "create [--object objectdef] [-q] [-f fmt] [-b backing_file [-F backing_fmt]] [-u] [-t cache] [-o options] filename [size]")
|
|
SRST
|
|
-.. option:: create [--object OBJECTDEF] [-q] [-f FMT] [-b BACKING_FILE [-F BACKING_FMT]] [-u] [-o OPTIONS] FILENAME [SIZE]
|
|
+.. option:: create [--object OBJECTDEF] [-q] [-f FMT] [-b BACKING_FILE [-F BACKING_FMT]] [-u] [-t CACHE] [-o OPTIONS] FILENAME [SIZE]
|
|
ERST
|
|
|
|
DEF("dd", img_dd,
|
|
diff --git a/qemu-img.c b/qemu-img.c
|
|
index 5a77f67719..80adee2620 100644
|
|
--- a/qemu-img.c
|
|
+++ b/qemu-img.c
|
|
@@ -516,6 +516,7 @@ static int img_create(int argc, char **argv)
|
|
const char *base_fmt = NULL;
|
|
const char *filename;
|
|
const char *base_filename = NULL;
|
|
+ const char *cache = BDRV_DEFAULT_CACHE;
|
|
char *options = NULL;
|
|
Error *local_err = NULL;
|
|
bool quiet = false;
|
|
@@ -527,7 +528,7 @@ static int img_create(int argc, char **argv)
|
|
{"object", required_argument, 0, OPTION_OBJECT},
|
|
{0, 0, 0, 0}
|
|
};
|
|
- c = getopt_long(argc, argv, ":F:b:f:ho:qu",
|
|
+ c = getopt_long(argc, argv, ":F:b:f:t:ho:qu",
|
|
long_options, NULL);
|
|
if (c == -1) {
|
|
break;
|
|
@@ -551,6 +552,9 @@ static int img_create(int argc, char **argv)
|
|
case 'f':
|
|
fmt = optarg;
|
|
break;
|
|
+ case 't':
|
|
+ cache = optarg;
|
|
+ break;
|
|
case 'o':
|
|
if (accumulate_options(&options, optarg) < 0) {
|
|
goto fail;
|
|
@@ -594,6 +598,14 @@ static int img_create(int argc, char **argv)
|
|
error_exit("Unexpected argument: %s", argv[optind]);
|
|
}
|
|
|
|
+ if (!options) {
|
|
+ options = g_strdup_printf(BLOCK_OPT_CACHE"=%s", cache);
|
|
+ } else {
|
|
+ char *old_options = options;
|
|
+ options = g_strdup_printf("%s,"BLOCK_OPT_CACHE"=%s", options, cache);
|
|
+ g_free(old_options);
|
|
+ }
|
|
+
|
|
bdrv_img_create(filename, fmt, base_filename, base_fmt,
|
|
options, img_size, flags, quiet, &local_err);
|
|
if (local_err) {
|
|
diff --git a/tests/qemu-iotests/049.out b/tests/qemu-iotests/049.out
|
|
index 34e1b452e6..b4a9705ec2 100644
|
|
--- a/tests/qemu-iotests/049.out
|
|
+++ b/tests/qemu-iotests/049.out
|
|
@@ -4,90 +4,90 @@ QA output created by 049
|
|
== 1. Traditional size parameter ==
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1024
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1024b
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1k
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1K
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1048576 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1048576 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1G
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1073741824 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1073741824 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1T
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1099511627776 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1099511627776 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1024.0
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1024.0b
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1.5k
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1536 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1536 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1.5K
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1536 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1536 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1.5M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1572864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1572864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1.5G
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1610612736 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1610612736 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 TEST_DIR/t.qcow2 1.5T
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1649267441664 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1649267441664 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
== 2. Specifying size via -o ==
|
|
|
|
qemu-img create -f qcow2 -o size=1024 TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1024b TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1k TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1K TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1M TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1048576 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1048576 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1G TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1073741824 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1073741824 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1T TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1099511627776 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1099511627776 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1024.0 TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1024.0b TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1024 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1.5k TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1536 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1536 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1.5K TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1536 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1536 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1.5M TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1572864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1572864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1.5G TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1610612736 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1610612736 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o size=1.5T TEST_DIR/t.qcow2
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1649267441664 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1649267441664 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
== 3. Invalid sizes ==
|
|
|
|
@@ -132,84 +132,84 @@ qemu-img: TEST_DIR/t.qcow2: The image size must be specified only once
|
|
== Check correct interpretation of suffixes for cluster size ==
|
|
|
|
qemu-img create -f qcow2 -o cluster_size=1024 TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1024 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1024 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o cluster_size=1024b TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1024 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1024 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o cluster_size=1k TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1024 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1024 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o cluster_size=1K TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1024 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1024 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o cluster_size=1M TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1048576 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1048576 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o cluster_size=1024.0 TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1024 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1024 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o cluster_size=1024.0b TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1024 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=1024 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o cluster_size=0.5k TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=512 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=512 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o cluster_size=0.5K TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=512 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=512 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o cluster_size=0.5M TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=524288 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=524288 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
== Check compat level option ==
|
|
|
|
qemu-img create -f qcow2 -o compat=0.10 TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=0.10 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=0.10 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o compat=1.1 TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=1.1 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=1.1 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o compat=0.42 TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=0.42 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=0.42 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
qemu-img: TEST_DIR/t.qcow2: Parameter 'version' does not accept value '0.42'
|
|
|
|
qemu-img create -f qcow2 -o compat=foobar TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=foobar lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=foobar lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
qemu-img: TEST_DIR/t.qcow2: Parameter 'version' does not accept value 'foobar'
|
|
|
|
== Check preallocation option ==
|
|
|
|
qemu-img create -f qcow2 -o preallocation=off TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off preallocation=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off preallocation=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o preallocation=metadata TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off preallocation=metadata compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off preallocation=metadata compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o preallocation=1234 TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off preallocation=1234 compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off preallocation=1234 compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
qemu-img: TEST_DIR/t.qcow2: Parameter 'preallocation' does not accept value '1234'
|
|
|
|
== Check encryption option ==
|
|
|
|
qemu-img create -f qcow2 -o encryption=off TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 encryption=off cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 encryption=off cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 --object secret,id=sec0,data=123456 -o encryption=on,encrypt.key-secret=sec0 TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 encryption=on encrypt.key-secret=sec0 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 encryption=on encrypt.key-secret=sec0 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
== Check lazy_refcounts option (only with v3) ==
|
|
|
|
qemu-img create -f qcow2 -o compat=1.1,lazy_refcounts=off TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=1.1 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=1.1 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o compat=1.1,lazy_refcounts=on TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=1.1 lazy_refcounts=on refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=1.1 lazy_refcounts=on refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o compat=0.10,lazy_refcounts=off TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=0.10 lazy_refcounts=off refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=0.10 lazy_refcounts=off refcount_bits=16 cache=writeback
|
|
|
|
qemu-img create -f qcow2 -o compat=0.10,lazy_refcounts=on TEST_DIR/t.qcow2 64M
|
|
-Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=0.10 lazy_refcounts=on refcount_bits=16
|
|
+Formatting 'TEST_DIR/t.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=67108864 compat=0.10 lazy_refcounts=on refcount_bits=16 cache=writeback
|
|
qemu-img: TEST_DIR/t.qcow2: Lazy refcounts only supported with compatibility level 1.1 and above (use version=v3 or greater)
|
|
|
|
== Expect error when backing file name is empty string ==
|
|
diff --git a/tests/qemu-iotests/099.out b/tests/qemu-iotests/099.out
|
|
index 8cce627529..f6f8f25957 100644
|
|
--- a/tests/qemu-iotests/099.out
|
|
+++ b/tests/qemu-iotests/099.out
|
|
@@ -1,6 +1,6 @@
|
|
QA output created by 099
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=131072
|
|
-Formatting 'TEST_DIR/t.IMGFMT.compare', fmt=raw size=131072
|
|
+Formatting 'TEST_DIR/t.IMGFMT.compare', fmt=raw size=131072 cache=writeback
|
|
|
|
=== Testing simple filename for blkverify ===
|
|
|
|
--
|
|
2.27.0
|
|
|